對於我的ASP.NET Web API項目,我有以下設置它使用Autofac作爲IoC容器:Autofac OwnedInstances和ASP.NET Web API的支持InstancePerApiRequest
protected void Application_Start(object sender, EventArgs e)
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.DependencyResolver =
new AutofacWebApiDependencyResolver(
RegisterServices(new ContainerBuilder()));
config.Routes.MapHttpRoute("DefaultRoute", "api/{controller}");
}
private static IContainer RegisterServices(ContainerBuilder builder)
{
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<ConfContext>().InstancePerApiRequest();
return builder.Build();
}
和我有下面的消息處理以檢索ConfContext
實例只是爲了好玩:
public class MyHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
ConfContext ctx = (ConfContext)request.GetDependencyScope().GetService(typeof(ConfContext));
return base.SendAsync(request, cancellationToken);
}
}
由於構造控制器之前,我的消息處理程序將被調用,我應該在控制器獲得相同ConfContext
實例。但是,如果我嘗試檢索ConfContext
作爲Func<Owned<ConfContext>>
,但我想獲得相同的實例,我想獲取單獨的實例。如果我刪除了InstancePerApiRequest
註冊,那麼我將丟失Per API請求支持,因爲我只想按原樣檢索ConfContext
。
有什麼辦法可以在這裏支持這兩種情況嗎?
編輯