2017-06-19 95 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擴展點,而不是使用這種方法。