伙计,
根据我的理解,Autofac.Integration.WebApi有助于在WebAPI项目中创建实例。
我在global.asax中注册了几个类:
builder.RegisterType<ExecutionContextResolver>().As<IExecutionContextResolver>().InstancePerRequest();
builder.RegisterType<LoggingService>().As<ILoggingService>().InstancePerRequest();
这些实例是通过我的控制器构造函数中的构造函数注入自动创建的。我最好的猜测是,这些实例是每个请求的生命周期。到现在为止还挺好。
但是想象一下,我有一个相对&#34;长时间的服务电话。在此调用中,一大堆组件将尝试访问类的相同实例(例如,ConfigurationService)。
有两个选项:
我想让我的组件分离,所以我决定使用Autofac容器来获取每个组件中的单例。
但如果我将我的类型注册为
builder.RegisterType<ConfigurationService>().As<IConfigurationService>().SingleInstance();
我会收到以下错误:
没有标记匹配的范围&#39; AutofacWebRequest&#39;是可见的 请求实例的范围。这通常表明 正在请求按照HTTP请求注册的组件 一个SingleInstance()组件(或类似的场景。)
有没有办法在Autofac.Integration.WebApi中处理单例?
提前致谢!
答案 0 :(得分:0)
如错误消息所示,您的ConfirugationService单例具有一些在“每个请求”生命周期范围内注册的依赖项。这打破了依赖关系树,因为当没有请求范围可用时你的单例组件被实例化,更糟糕的是,如果你有机会使它工作(在第一次实例化单例时会有一个请求范围),之后请求完成后,所有“按请求”组件将被处理,并且您的单件将在这些组件的任何使用中崩溃。