Autofac PerRequest的WebAPI 2 + Owin
问题描述:
想实现autofac与我的WebAPI ......但与寿命为我的对象的一些问题...Autofac PerRequest的WebAPI 2 + Owin
我启动的WebAPI类:
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
container.RegisterType<MyConcreteClass>().As<IMyInterface>().InstancePerRequest();
var container = builder.Build();
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
var csl = new AutofacServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => csl);
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
但不是作品
无法解析类型“IMyInterface的”,因为它是属于在寿命范围不能被定位。以下服务由该登记暴露: - IMyInterface的
细节--->没有与标签匹配的“AutofacWebRequest”范围是其中要求实例的范围可见。
如果web应用程序的执行期间看到这一点,它通常表示正在由SingleInstance()组分(或类似的情况)要求登记为每个HTTP请求的部件。在Web集成下,总是从依赖解析器或请求生存期范围请求依赖关系,而不是从容器本身。 (详细内容见内部例外)
删除此零件.InstancePerRequest();,然后工作,但对象不处理。
我在做什么错了?
谢谢!
答
我强烈怀疑问题出在下面的代码:
var csl = new AutofacServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => csl);
该错误信息表明您使用依赖解析器必须解决依赖关系,但是这是绕过使用容器本身。
在附注上,使用service locator is anti-pattern。你应该注入依赖到你的控制器和其他MVC扩展点,而不是使用这种方法。