问题描述
使用 .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 (将#修改为@)