2016-06-10 154 views
3

我們正在使用Autofac 4進行DI,並且我不久前開始嘗試使用AI。現在我創建了一個IdentityTelemetryInitializer類,它需要和IIdentityProvider能夠獲得當前授權用戶的ID並將其添加到上下文中。我無法找到將依賴注入到TelemetryInitializer的方法。如果我定義了一個採用IIdentityProvider的構造器,則自定義初始化器將被完全跳過。 歡迎任何想法。我正在考慮將用戶標識設置爲線程負責人,以便我們可以通過這種方式訪問​​它,但是我希望可以使用DI來做到這一點?如何在自定義TelemetryInitializer中注入依賴項?

+0

你說的「自定義初始化程序完全被忽略了」是什麼?你的意思是說,基地ctor不叫? –

回答

0

您不能使用構造函數作爲使用默認(空)構造函數在內部初始化的初始化程序注入依賴項。當你明確地定義了一個新的ctor時,你實際上已經「刪除」了默認的ctor,因此初始化器完全被跳過了,就像你剛纔提到的那樣。

因此,唯一的方法是在應用程序啓動時註冊它們之後,在'Initialize'方法期間解決依賴關係。

ctx.RegisterType<MyService>().As<IService>().AsSelf(); // on application startup 
ctx.Resolve<IService>(); // during initializer 'Initialize' method 
+0

感謝您的回答。我試過了,但是,依賴關係是通過.InstancePerRequest()在Autofac中註冊的。遙測初始化程序類看起來生活在一個不同的(更長的生命週期)範圍內,並且無法訪問每個請求的依賴關係:-( –

+0

@ParaJaco不能使用HttpContext從Autofac文檔解析依賴關係?[我如何使用每個請求生存期範圍?](http://docs.autofac.org/en/latest/faq/per-request-scope.html):「如果您在ASP中有應用程序啓動代碼或後臺線程。嘗試使用DependencyResolver.Current的NET MVC應用程序 - AutofacDependencyResolver需要Web上下文來解決問題,當您嘗試從解析器解析某些內容時,它將嘗試啓動每個請求生存期範圍並將其與當前HttpContext「 – yonisha

+0

我不知道如何做到這一點,你會有一個如何做到這一點的例子嗎? –