【发布时间】:2011-05-14 22:04:40
【问题描述】:
我已经使用 StructureMap 一年多了。一直以来,我都有一个名为 IoC 的包装类,它看起来像这样
class IoC {
public static T GetInstance<T>()
{
return (T)GetInstance(typeof(T));
}
public static IEnumerable<T> GetAllInstances<T>()
{
return ObjectFactory.GetAllInstances<T>();
}
public static IEnumerable GetAllInstances(Type type)
{
return ObjectFactory.GetAllInstances(type);
}
public static object GetInstance(Type type)
{
return ObjectFactory.GetInstance(type);
}
public static void Inject<T>(T obj)
{
ObjectFactory.Inject(obj);
}
}
我添加了包装器,假设我可能想在某个时间点更改 IoC 容器。在这一点上,我认为这很糟糕。一个原因是:我不能在我的代码中使用 ObjectFactory 来做其他有趣的事情,我必须使用这个包装器。另一件事是:我们的代码实际上不应该独立于 DependencyInjection 容器。
使用这种方法的优点/缺点是什么?
【问题讨论】:
-
Mark Seemann 将此类包装器称为“符合容器”。他最近写了一个blog post about this,并明确称这是一种反模式。
标签: dependency-injection structuremap ioc-container wrapper abstraction