我们的服务结构服务与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注册的一部分注册的注册中 .