我正在尝试创建一个服务,该服务将运行为Windows服务,如此处所述。我的问题是,示例Web主机服务构造函数仅接受
显然我正在使用Simple Injector作为DI容器。它已在
我的问题是如何在HostExtensions类中访问框架的容器(即IServicesCollection),以便我可以将必要的依赖项注入到
IWebHost
参数。我的服务需要一个更像这样的构造函数:public static class HostExtensions
{
public static void RunAsMyService(this IWebHost host)
{
var webHostService =
new MyService(host, loggerFactory, myClientFactory, schedulerProvider);
ServiceBase.Run(webHostService);
}
}
我的Startup.cs
文件看起来类似于这样:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.AddInMemoryCollection();
this.Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
this.container.RegisterSingleton<IConfiguration>(this.Configuration);
services.AddSingleton<IControllerActivator>(
new SimpleInjectorControllerActivator(container));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
app.UseSimpleInjectorAspNetRequestScoping(this.container);
this.container.Options.DefaultScopedLifestyle = new AspNetRequestLifestyle();
this.InitializeContainer(app, loggerFactory);
this.container.Verify();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
}
private void InitializeContainer(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
container.Register(() => loggerFactory, Lifestyle.Singleton);
container.Register<IMyClientFactory>(() => new MyClientFactory());
container.Register<ISchedulerProvider>(() => new SchedulerProvider());
}
显然我正在使用Simple Injector作为DI容器。它已在
IServiceCollection
中注册,如他们的文档所述。我的问题是如何在HostExtensions类中访问框架的容器(即IServicesCollection),以便我可以将必要的依赖项注入到
MyService
中?对于MVC控制器,这一切都是在后台处理的,但我不知道有哪些文档详细说明了在其他地方需要访问它的方法。
IServiceCollection
)已经很好用了,还要使用另一个 DI 容器呢?这似乎是增加了一个完全不必要的层。有什么优势吗? - R. Richards