使用Factory方法检索注入的对象是不错的做法,还是只使用DI框架中的工厂方法?
我正在使用结构图,我应该只使用ObjectFactory.GetInstance();还是应该创建工厂类并在此类中调用ObjectFactory.GetInstance();?因为如果我调用ObjectFactory.GetInstance();在我的课程中,我将创建与DI框架的耦合?抱歉,如果我无知,我对这个概念不熟悉。谢谢!
答案 0 :(得分:3)
如果您已经在使用DI框架,为什么在框架已经提供工厂模式时重新实现工厂模式?此外,您不应该在应用程序的业务层中使用DI框架创建依赖项。在那里你应该使用接口和抽象类进行抽象。 DI框架应该仅在最高级别使用,例如在GUI中执行较低层的管道并选择例如合适的数据访问层。
答案 1 :(得分:3)
当需要实例时需要对进行细粒度控制时,工厂方法很有用。不过,您不应直接依赖容器本身,而应将工厂方法作为依赖项注入。这是一个说明这一点的例子:
public class SomeController
{
private Func<ISomeService> _serviceFactory;
public SomeController(Func<ISomeService> serviceFactory)
{
_serviceFactory = serviceFactory;
}
public void DoSomeWork()
{
var service = _serviceFactory();
....
}
}
StructureMap注册码看起来像这样:
var container = new Container(cfg =>
cfg.For<ISomeService>().Use(() => new SomeServiceImpl())
);