2017-06-19 34 views
0

想实现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();,然后工作,但对象不处理。

我在做什么错了?

谢谢!

回答

1

我强烈怀疑问题出在下面的代码:

var csl = new AutofacServiceLocator(container); 
ServiceLocator.SetLocatorProvider(() => csl); 

该错误信息表明您使用依赖解析器必须解决依赖关系,但是这是绕过使用容器本身。

在附注上,使用service locator is anti-pattern。你应该注入依赖到你的控制器和其他MVC扩展点,而不是使用这种方法。