在配置服务中访问应用程序 DI 容器

问题描述

使用 .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 方法中解析我的控制器代理,但我无权访问容器,我可以做些什么来实现它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)