问题描述
来制作一个使用自定义AppService的控制台应用程序
对我来说调用服务是有效的,但是当我尝试使用IRepository时出现以下错误
Castle.MicroKernel.Handlers.HandlerException:'无法创建组件'VCloud.Rtdm.CashAudit.TestManager',因为它具有要满足的依赖性。
好像我没有注册IRepository。
Program.cs
class Program
{
static void Main(string[] args)
{
TestUserReferencedService();
}
/// <summary>
/// Prueba de USAR un servicio de aspnetzero referenciando al proyecto. Spoiler: No funciona
/// </summary>
static async void TestUserReferencedService()
{
Clock.Provider = ClockProviders.Utc;
Console.WriteLine("Starting");
//Bootstrapping ABP system
using (var bootstrapper = AbpBootstrapper.Create<VCloudConsoleApplicationModule>())
{
bootstrapper.IocManager
.IocContainer
.AddFacility<LoggingFacility>(f => f.UseAbpLog4Net().WithConfig("log4net.config"));
bootstrapper.Initialize();
//Getting a Tester object from DI and running it
using (var tester = bootstrapper.IocManager.ResolveAsdisposable<TestAppService>())
{
var x = (await tester.Object.TestCount());
} //disposes tester and all it's dependencies
Console.WriteLine("Press enter to exit...");
Console.ReadLine();
}
}
}
VCloudConsoleApplicationModule.cs
[DependsOn(
typeof(VCloudApplicationSharedModule),typeof(VCloudConsoleCoreModule),typeof(AbpEntityFrameworkCoreModule),typeof(AbpDapperModule),typeof(AbpZeroCommonModule)
)]
public class VCloudConsoleApplicationModule : AbpModule
{
public override void PreInitialize()
{
//Adding authorization providers
Configuration.Authorization.Providers.Add<AppAuthorizationProvider>();
//Adding custom AutoMapper configuration
Configuration.Modules.AbpAutoMapper().Configurators.Add(CustomDtoMapper.CreateMappings);
Configuration.BackgroundJobs.IsJobExecutionEnabled = false;
}
public override void Initialize()
{
IocManager.RegisterassemblyByConvention(typeof(VCloudConsoleApplicationModule).GetAssembly());
DapperExtensions.DapperExtensions.SetMappingAssemblies(new List<Assembly>
{typeof(VCloudConsoleApplicationModule).GetAssembly()});
DapperExtensions.DapperExtensions.SetMappingAssemblies(new List<Assembly>
{
typeof(VCloud.Dapper.Mappers.DapperMapper_RtdmOrder).GetAssembly(),typeof(VCloud.Dapper.Mappers.DapperMapper_RtdmOrderItem).GetAssembly(),typeof(VCloud.Dapper.Mappers.DapperMapper_RtdmCompany).GetAssembly(),typeof(VCloud.Dapper.Mappers.DapperMapper_RtdmRestaurant).GetAssembly()
});
//DapperExtensions.DapperExtensions.Configure();
//Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
}
}
TestManager.cs
public class TestManager : VCloudDomainServiceBase,ITestManager
{
private IRepository<Invoice> _repository;
public TestManager(IRepository<Invoice> repository)
{
_repository = repository;
}
public async Task<int> GetCount()
{
return await _repository.CountAsync();
}
}
解决方法
您的问题与依赖注入无关,问题可能是您忘记将实体Invoice
添加到EntityFramework项目中应用程序的DbContext
中。
添加后,您的问题将得到解决。
public class VCloudApplicationDbContext : AbpZeroDbContext<Tenant,Role,User,VCloudApplicationDbContext>,IAbpPersistedGrantDbContext
{
public DbSet<Invoice> Invoice { get; set; }
}
我希望它可以为您提供帮助