【发布时间】:2017-05-29 15:42:31
【问题描述】:
在 OWIN 的美好时光中,在 aspnet core 之前,可以通过传入一个 HttpConfiguration 对象来配置 ASP.NET WebApi。在那里可以配置 ControllerActivator 等...如果您愿意...例如
appBuilder.UseWebApi(webApiConfig)
在 ASP.NET MVC Core 中是否有类似的方法可以做到这一点,避免使用 WebHostBuilder(直接或通过启动约定)?
例如不使用类似的东西:
var host = new WebHostBuilder()
.ConfigureServices(serviceCollection =>
serviceCollection.AddSingleton<IControllerActivator>(new
ControllerActivator()))
(唯一可以在 .UseMVC 上使用的重载需要一个 IRouteBuilder ......或者有没有办法到达 ServiceCollection 来操作 ControllerActivator?)
编辑:
可以选择使用 ServiceCollection 类创建 IServiceProvider。然后可以将 IServiceProvider 作为参数传递给 ApplicationBuilder,如下所示:
var serviceCollection = new ServiceCollection();
serviceCollection.AddMvcCore();
var serviceProvider = serviceCollection
.AddSingleton<IControllerActivator>(new ControllerActivator())
.AddLogging()
.BuildServiceProvider();
ApplicationBuilder builder = new ApplicationBuilder(serviceProvider);
builder.UseMvc();
return builder.Build();
但是,这让我有一个例外:
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Extensions.Options.IOptions`1[Microsoft.AspNetCore.Mvc.MvcOptions]' while attempting to activate 'Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory'
进一步调查......
【问题讨论】:
-
看起来像一个 XY 问题,你到底想达到什么目的?
-
我创建了一个HttpMessageHandler,它可以接受一个RequestDelegate(或中间件),以便可以使用HttpClient(Damian Hickey 的OwinHttpMessageHandler 的一个端口)直接调用它。现在,在“旧”OWIN 堆栈中,可以在设置请求/中间件管道时直接传入 HttpConfiguration...我想做类似的事情...
标签: c# asp.net-core-mvc