.net 核心工作者服务如何 DI 样板库?

问题描述

我创建了一个工作服务,在这个服务中我需要使用其他实现的服务,这些服务碰巧使用了来自 abp 域的类,如 IRepository。 现在我想配置 (WorkerModule.cs,Program.cs) 以便我可以使用 abp 类的依赖注入。 我一步一步跟着github上的演示和文档,仍然不断给我异常说: “值不能为空”行:“abpBootstrapper.Initialize();”在我的 Program.cs 中。

这是我的 Program.cs 代码

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft",LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .Writeto.File(@"C:\temp\workerservice\LogFile.txt")
            .CreateLogger();

        try
        {
            Log.information("Starting up the service");
            CreateHostBuilder(args).Build().Run();
            return;
        }
        catch (Exception ex)
        {
            Log.Fatal(ex,"There was a problem starting the service");
            return;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext,services) =>
            {
                var abpBootstrapper = AbpBootstrapper.Create<WorkerModule>();
                services.AddSingleton(abpBootstrapper);
                abpBootstrapper.Initialize();

                services.AddHostedService<Worker>();
            })
            .UseWindowsService()
            .UseCastleWindsor(IocManager.Instance.IocContainer)
            .UseSerilog();
    }
}

这是我的 WorkerModule.cs 代码

[DependsOn(
    typeof(AbpZeroCoreModule),typeof(AbpZeroLdapModule),typeof(AbpAutoMapperModule),typeof(AbpAspNetZeroCoreModule),typeof(AbpMailKitModule),typeof(AbpEntityFrameworkCoreModule),typeof(AbpRedisCacheModule)
    )]
public class WorkerModule : AbpModule
{
    private readonly IConfigurationRoot _appConfiguration;

    public WorkerModule()
    {
        _appConfiguration = AppConfigurations.Get(Assembly.GetExecutingAssembly().GetDirectoryPathOrNull());
    }

    public override void PreInitialize()
    {
        Configuration.DefaultNameOrConnectionString = _appConfiguration.GetConnectionString(MyAppConsts.ConnectionStringName);

        var builder = new DbContextOptionsBuilder<MyDbContext>();

        MyDbContextConfigurer.Configure(builder,Configuration.DefaultNameOrConnectionString);

        IocManager.IocContainer.Register(
           Component
               .For<DbContextOptions<MyDbContext>>()
               .Instance(builder.Options)
               .LifestyleTransient()
       );
    }

    public override void Initialize()
    {
        IocManager.RegisterassemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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