【发布时间】:2010-06-20 19:07:58
【问题描述】:
我正在处理的应用程序需要动态创建对象,其中一些还使用单例实例(当然,基于生命周期管理器),因为涉及状态(想想 WCF 服务会话等... )。
只要我通过 UnityContainer 类的同一个实例解决,一切都很好,但我认为这里的蛇正在咬自己的尾巴:
a) 每个人都讨厌提供 UnityContainer 的单个实例的最直观的想法 - 类
b) 同时这似乎是唯一合乎逻辑的解决方案
我的意思是,说真的,如果对 ServiceLocator - 模式有这么多的仇恨,那么你还有什么建议呢?
编辑:
好的,我找到了一个很好的解决方案。 UnityContainer - 类可以将自身作为单例注入。这是一个例子(它的风格很丑陋,但它证明了我的观点):
static void Main(string[] args)
{
var container = new UnityContainer().LoadConfiguration();
var test = container.Resolve<MyDependant>();
test.TestTheDependency();
foreach (var registration in container.Registrations)
{
Console.WriteLine(registration.RegisteredType.Name);
}
var container2 = container.Resolve<IUnityContainer>();
Console.WriteLine(container.GetHashCode());
Console.WriteLine(container2.GetHashCode());
test.ShowUnityContainerHashCode();
var testD1 = container.Resolve<ITestDependency>();
var testD2 = container2.Resolve<ITestDependency>();
Console.WriteLine(testD1.GetHashCode());
Console.WriteLine(testD2.GetHashCode());
test.ShowTestDependencyHashCode();
}
显示 2 个区块 á 3 次相同的哈希码如果
<register type="ITestDependency" mapTo="TestDependency">
<lifetime type="singleton"/>
</register>
<register type="MyDependant" />
在 app.config 中设置。
非常好。我爱 Unity,说真的。这是热门的东西。
【问题讨论】:
标签: dependency-injection unity-container ioc-container