使用Factory获取Injected对象

时间:2010-05-18 17:02:50

标签: c# .net dependency-injection structuremap

使用Factory方法检索注入的对象是不错的做法,还是只使用DI框架中的工厂方法?

我正在使用结构图,我应该只使用ObjectFactory.GetInstance();还是应该创建工厂类并在此类中调用ObjectFactory.GetInstance();?因为如果我调用ObjectFactory.GetInstance();在我的课程中,我将创建与DI框架的耦合?抱歉,如果我无知,我对这个概念不熟悉。谢谢!

2 个答案:

答案 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())
);