我们的服务结构服务与Autofac集成,将子范围传递给预先存在的注册的SF服务 .
这适用于Owin风格的API服务,因为Autofac集成期望范围:
// Configure Web API for self-host.
public Startup(ILifetimeScope scope){
HttpConfiguration config = new HttpConfiguration();
...
config.DependencyResolver = new AutofacWebApiDependencyResolver(scope);
appBuilder.UseAutofacMiddleware(scope);
appBuilder.UseAutofacWebApi(config);
appBuilder.UseWebApi(config);`
}
当前实现期望在 Program
类中定义全局Container . 而不是 ServiceRuntime.registerStatelessServiceAsync
,我们使用 container.RegisterStatelessServiceAsync
. 主要思想是从现有容器创建服务 . 此解决方案为Startup类提供ILifetimeScope .
当我们切换到.NET Core来托管我们的API服务时,我们遇到了一个问题,即Autofac Integration需要一个Container Builder:
public IServiceProvider ConfigureServices(IServiceCollection services){
...
builder.Populate(services);
//HACK - we save global Container as static in Program.
builder.Update(Program.RootContainer);
return new AutofacServiceProvider(Program.RootContainer);
}
现在我们有一个讨厌的hack来更新原始容器 .
但我觉得我想要一个新的儿童望远镜,或者允许我将DotNetServices注册到已经作为Service Fabric注册的一部分注册的注册中 .