SingleInstance和InstancePerRequest无法在Web API 2下运行

时间:2014-11-21 23:04:15

标签: asp.net-web-api autofac asp.net-web-api2

我有以下注册:

       builder
            .RegisterAssemblyTypes(assemblies)
            .Where(t => t.GetCustomAttributes(typeof(IocContainerMarkerAttribute), false).Any()
                && ((IocContainerMarkerAttribute)t.GetCustomAttribute(typeof(IocContainerMarkerAttribute))).IsSingleInstance == false)
            .AsImplementedInterfaces()
            .InstancePerRequest()
            .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

        builder
            .RegisterAssemblyTypes(assemblies)
            .Where(t => t.GetCustomAttributes(typeof(IocContainerMarkerAttribute), false).Any()
                          && ((IocContainerMarkerAttribute)t.GetCustomAttribute(typeof(IocContainerMarkerAttribute))).IsSingleInstance)
            .AsImplementedInterfaces()
            .SingleInstance()
            .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

我正在尝试请求以下依赖项:

[IocContainerMarker(false)]
public class SecurityProvider : ISecurityProvider
{}

像这样:

ar authenticationSecurityProvider = (ISecurityProvider)request.GetDependencyScope().GetService(typeof(ISecurityProvider));

如果我评论第二个注册构建块,它可以正常工作但如果我取消注释它,我会得到以下异常:

从请求实例的作用域中看不到具有匹配'AutofacWebRequest'的标记的作用域。这通常表示SingleInstance()组件(或类似场景)正在请求注册为每HTTP请求的组件。在Web集成下,始终从DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime请求依赖项,从不从容器本身请求

这似乎是一件相当普遍的事情,所以我在这里缺少什么?

由于

更新

问题似乎是另一个问题。我需要将一个单例依赖项注入InstancePerRequest。

1 个答案:

答案 0 :(得分:0)

事实证明,我犯了一个错误,并在SingleIntance对象中设置了InstancePerRequest依赖项。