我們正在使用Autofac 4進行DI,並且我不久前開始嘗試使用AI。現在我創建了一個IdentityTelemetryInitializer類,它需要和IIdentityProvider能夠獲得當前授權用戶的ID並將其添加到上下文中。我無法找到將依賴注入到TelemetryInitializer的方法。如果我定義了一個採用IIdentityProvider的構造器,則自定義初始化器將被完全跳過。 歡迎任何想法。我正在考慮將用戶標識設置爲線程負責人,以便我們可以通過這種方式訪問它,但是我希望可以使用DI來做到這一點?如何在自定義TelemetryInitializer中注入依賴項?
回答
您不能使用構造函數作爲使用默認(空)構造函數在內部初始化的初始化程序注入依賴項。當你明確地定義了一個新的ctor時,你實際上已經「刪除」了默認的ctor,因此初始化器完全被跳過了,就像你剛纔提到的那樣。
因此,唯一的方法是在應用程序啓動時註冊它們之後,在'Initialize'方法期間解決依賴關係。
ctx.RegisterType<MyService>().As<IService>().AsSelf(); // on application startup
ctx.Resolve<IService>(); // during initializer 'Initialize' method
感謝您的回答。我試過了,但是,依賴關係是通過.InstancePerRequest()在Autofac中註冊的。遙測初始化程序類看起來生活在一個不同的(更長的生命週期)範圍內,並且無法訪問每個請求的依賴關係:-( –
@ParaJaco不能使用HttpContext從Autofac文檔解析依賴關係?[我如何使用每個請求生存期範圍?](http://docs.autofac.org/en/latest/faq/per-request-scope.html):「如果您在ASP中有應用程序啓動代碼或後臺線程。嘗試使用DependencyResolver.Current的NET MVC應用程序 - AutofacDependencyResolver需要Web上下文來解決問題,當您嘗試從解析器解析某些內容時,它將嘗試啓動每個請求生存期範圍並將其與當前HttpContext「 – yonisha
我不知道如何做到這一點,你會有一個如何做到這一點的例子嗎? –
- 1. 自定義ViewResolver和依賴項注入
- 2. 如何在組件的類定義中注入依賴項?
- 3. 自定義Razor查看基類和依賴項注入
- 4. IoC依賴注入到自定義HTTP模塊 - 如何? (ASP.NET)
- 5. 如何在WCF中將依賴關係注入到自定義的UserNamePasswordValidator中?
- 6. 如何注入WebRequest/Response依賴項?
- 7. 如何向JerseyTest注入依賴項?
- 8. 如何在模塊定義時注入AngularJS模塊依賴項,而無需在依賴數組中聲明它?
- 9. 向pom.xml添加自定義jar(依賴項)依賴項
- 10. 依賴項注入Grails Webflow
- 11. 如何處理抽象第三方依賴項(依賴注入)?
- 12. 自定義工作流活動中的依賴注入
- 13. C#依賴注入 - 如何注入無源的依賴關係?
- 14. 如何注入d3依賴?
- 15. SCSF定製依賴注入
- 16. 依賴注入
- 17. 依賴注入
- 18. 依賴注入
- 19. 依賴注入
- 20. 依賴注入
- 21. 依賴注入
- 22. 注入依賴到一個自定義的ModelBinder
- 23. NLog:自定義目標的依賴注入
- 24. 如果在依賴項中有一些自定義代碼更改,如何管理節點模塊依賴項?
- 25. 使用依賴注入來注入依賴注入器
- 26. 如何綁定到此自定義依賴項屬性?
- 27. 是否可以在自定義OWIN中間件方法中註冊依賴項?
- 28. 如何在angularjs中注入這個依賴項?
- 29. 如何在Inversify中注入異步依賴項?
- 30. 如何使用StructureMap(4.0)將依賴項注入到自定義屬性中? MVC5項目
你說的「自定義初始化程序完全被忽略了」是什麼?你的意思是說,基地ctor不叫? –