【发布时间】:2016-11-11 12:55:23
【问题描述】:
我想要什么:解析对象 A,在对象 A 内部,我想使用同一个容器来解析对象 C:
public static void Work()
{
IUnityContainer con = new UnityContainer();
con.RegisterType<IA, A>();
con.RegisterType<IB, B>();
con.RegisterType<IC, C>();
var a = con.Resolve<IA>();
}
interface IA { }
interface IB { }
interface IC { }
class A : IA
{
public A(IB b, IUnityContainer con)
{
for (int i = 0; i < 10; i++)
{
var c = con.Resolve<IC>();
}
}
}
class B : IB { };
class C : IC { };
问题:在很多网站上,我看到注入容器是个坏主意,但在这种情况下怎么办?
编辑 1
服务定位器是一种反模式。那么如果可以将 Service Locator 与 IoC Container 一起使用,为什么可以呢?
【问题讨论】:
-
我从你的问题中遗漏的是 what question 你想在这里解决。为什么需要多次解析
IC以及为什么需要在A的构造函数中执行此操作。您能否通过使用真实姓名使您的用例更加具体,并描述您在做什么以及为什么? -
@Steven 我想在我的应用程序的许多地方使用容器。我的解决方案是到处注入那个容器。我知道到处注入它是个坏主意,但服务定位器被称为反模式和静态类更糟糕。
-
这是我很清楚的部分。我不清楚的是您的具体用例。请用一个真实的例子详细说明,而不是像
A和IC这样的类。
标签: c# inversion-of-control unity-container ioc-container