![](/img/trans.png)
[英]Using Dependency Injection (Autofac) and avoiding Service Locator pattern
[英]Using Autofac as a service locator
我正在使用Autofac來處理我的應用程序中的依賴注入。 但是,我有一個組件在運行時執行一些反射魔法,我不知道它在編譯時需要什么依賴項。
通常,我只是讓這個組件直接引用Container並解決它想要的任何問題。 但是,實例化此類的類沒有對Container的引用。
實際上,我的組件依賴於Autofac。 我更喜歡松散耦合,但這似乎不是一個選擇。 有沒有辦法問(在構造函數args中,或使用屬性注入,或其他什么!)Autofac給我一個對我的構造函數中的容器的引用? 或者,是否有一種更簡潔的方法讓Autofac為我提供可以解決任何問題的魔術服務定位器對象?
是的你可以。 只需依賴IComponentContext
:
public class MyComponent
{
IComponentContext _context;
public MyComponent(IComponentContext context)
{
_context = context;
}
public void DoStuff()
{
var service = _context.Resolve(...);
}
}
從注釋更新:注入MyComponent
的IComponentContext
取決於MyComponent
解析范圍。 因此,重要的是要考慮MyComponent
生命周期范圍。 例如,使用InstancePerLifetimeScope
,上下文將始終解析為依賴於MyComponent
的服務所在的相同范圍。
在其他情況下,如果未使用DI創建組件,則仍可以使用服務定位器模式。 CodePlex上的Common Service Locator庫非常適合此目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.