在使用自定义AppService的AspNet Boilerplate DotNetCore控制台应用中,它不会执行依赖项注入

问题描述

我试图通过改编示例https://github.com/aspnetboilerplate/aspnetboilerplate-samples/blob/master/AbpEfConsoleApp/AbpEfConsoleApp/Program.cs

来制作一个使用自定义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; }
}

我希望它可以为您提供帮助

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...