【问题标题】:Using Factory to get Injected objects使用工厂获取注入对象
【发布时间】:2010-05-18 17:02:49
【问题描述】:

使用工厂方法检索注入的对象是一种好习惯,还是只使用 DI 框架中的工厂方法可以?

我正在使用结构映射,我应该只使用 ObjectFactory.GetInstance();,还是应该创建工厂类并在这个类中调用 ObjectFactory.GetInstance();?因为如果我调用 ObjectFactory.GetInstance();在我的课程中,我会创建与 DI 框架的耦合吗?对不起,如果我是无知的,我是这个概念的新手。谢谢!

【问题讨论】:

    标签: c# .net dependency-injection structuremap


    【解决方案1】:

    如果您已经在使用 DI 框架,为什么要重新实现框架已经提供的工厂模式?此外,您不应该在应用程序的业务层中创建与 DI 框架的依赖关系。在那里,您应该使用接口和抽象类进行抽象。 DI 框架只能在最高级别使用,例如在 GUI 中执行低层的管道,并选择合适的数据访问层。

    【讨论】:

    • 我同意 Darin,让 DI 框架完成它的工作,而不是复制功能。
    【解决方案2】:

    当您需要对何时需要实例进行细粒度控制时,工厂方法很有用。不过,您不应直接依赖容器本身,而应将工厂方法作为依赖项注入。这是一个说明这一点的示例:

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

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2011-09-10
      • 1970-01-01
      • 2016-12-12
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2015-09-21
      相关资源
      最近更新 更多