0

使用 .net core 3 及以上ConfigureServices方法不返回IServiceprovider. 我们曾经在ConfigureServices方法中配置 Autofac 并使用它来解析控制器的注册代理,以便我们可以将控制器添加为服务:

 public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        var builder = new ContainerBuilder();

        services.AddHttpClient();

        var mvcBuilder = services.AddMvc(
                o =>
                {
                    o.Filters.Add<ModelStateValidationFilter>(1);
                    o.Filters.Add<RequestLogActionFilter>(int.MinValue);
                }).AddMvcOptions(o => o.EnableEndpointRouting = false)
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            
        builder.Populate(services);

        builder.RegisterModule(_module);

        builder.RegisterModule<DiagnosticsModule>();
        
        ApplicationContainer = builder.Build();

        mvcBuilder.AddControllersAsServices().AddGeneratedControllerProxies(ApplicationContainer);

        return new AutofacServiceProvider(ApplicationContainer);
    }

AddGeneratedControllerProxies扩展方法如下所示:

public static IMvcBuilder AddGeneratedControllerProxies(this IMvcBuilder builder, IContainer applicationContainer)
        => builder.ConfigureApplicationPartManager(
            m => m.FeatureProviders.Add(new ControllerProxyFeatureProvider(applicationContainer.ResolveOptional<IEnumerable<ControllerRegistration>>())));

现在,由于 .net core 3+ 及更高版本中 DI 服务提供者工厂的配置不同,ConfigureContainer因此在运行时调用了一个新方法,用于注册我们的模块和类型。我想在ConfigureServices方法中解析我的控制器代理,但我无权访问容器,有什么办法可以实现吗?

4

0 回答 0