我对依赖注入(inject)比较陌生,所以我可能在某种程度上扼杀了这个概念。但是,我正在尝试实现类似以下的目标,但不确定它是否可行:
假设我有两个容器,每个容器包含相同类型依赖项的不同实例。例如,每个包含 MyApplicationContext
和 MyRequestContext
的不同单个实例。
现在假设我有几个类依赖于其中一个(或两个)实例。他们不应该关心他们使用的是两个容器中的哪个;他们只需要一个依赖实例来完成工作。
在理想情况下,这些可靠类中的每一个都在其构造函数中进行静态调用,而构造函数又从适当的容器中反射性地注入(inject)依赖项...
public class MyDependableClass{
protected MyApplicationContext Application {get; set;}
protected MyRequestContext Request {get; set;}
public MyDependableClass() {
Dependencies.Inject(this);
}
}
但是,据我所知,没有确定适当容器的实用方法。我考虑过针对特定容器注册每个对象(例如 container.Register(obj);
),但这会很费力,如果构造函数中需要依赖项,则不会起作用。或者,您可以分析调用堆栈以从已注册的顶级对象推断容器......不适用于异步调用等
有什么想法吗?
示例: 我可能有几个依赖代理实例的类;我们称它为 ILogicProxy
。该代理可以将调用转发到另一台机器上的本地逻辑或远程逻辑。此外,该应用程序可以与多个远程机器建立连接。所以......我们可能有多个 ILogicProxy
实例需要注入(inject)到几个类中......但是哪个去哪里?像这样的解决方案可以只使用简单的“setter 属性注入(inject)”,但是当需要更多依赖项时这不会扩展,因为它会导致“连接”过程变得困惑/冗长。
最佳答案
这不是多个容器的情况。使用容器配置来连接。如果您在ILogicProxy
接口(interface)下注册了大量组件,那么是的,您将不得不进行更多的手动布线。但是问问自己,这些组件是否真的应该注册在同一个接口(interface)下。
关于代码示例:
In an ideal world, each of these dependable classes makes a static call in its constructor, which in turn reflectively injects the dependencies from an appropriate container...
public class MyDependableClass{
protected MyApplicationContext Application {get; set;}
protected MyRequestContext Request {get; set;}
public MyDependableClass() {
Dependencies.Inject(this);
}
}
这是服务位置,而不是依赖注入(inject)。总是喜欢依赖注入(inject)而不是服务位置。尽量不要依赖组件中的 Resolve() 或 Inject() 方法。
关于c# - .NET 反射依赖注入(inject)与多个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021780/