对于我的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
。
有什么办法可以在这里支持这两种情况吗?
编辑