问题描述
我创建了一个工作服务,在这个服务中我需要使用其他实现的服务,这些服务碰巧使用了来自 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 (将#修改为@)