![](/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.