【问题标题】:C# Difference between factory pattern and IoC [duplicate]C#工厂模式和IoC之间的区别[重复]
【发布时间】:2011-01-24 11:50:12
【问题描述】:

可能重复:
Dependency Injection vs Factory Pattern

有人可以解释(用简单的例子)工厂模式和控制反转模式之间的区别。最好使用.NET2.0

【问题讨论】:

  • 你的意思是“工厂模式”还是“抽象工厂模式”? (后者在含义上更接近 IoC。)
  • @Mark 这个问题很可能是重复的,但不幸的是它没有被接受的答案。
  • @chibacity:那么 Q 应该清楚地解释为什么它与您的帖子中的编辑不同。此外,赞成票的水平使得另一个线程中的答案是可行的。提问者是否费心接受和/或通过解释现有答案中可能导致接受的缺失特征来跟进是不相关的。如果人们觉得是这样,那就给它一个赏金。底线,这是一个非常相似的问题,所以附议 VTC
  • @Ruben 考虑过并提出关于 MSO 的问题,我同意。我认为更重要的是多次提出同一个问题会使问题变得碎片化。最好作为副本关闭以直接返回单个来源。关闭作为副本也将注意力带回到旧问题。我投票关闭。

标签: c# inversion-of-control design-patterns factory


【解决方案1】:

工厂模式: 需要引用服务的对象应该知道创建服务的工厂:

public class BLLObject 
{
    public IDal DalInstance { get; set; }

    public BLLObject()
    {
        DalInstance = DalFactory.CreateSqlServerDal();
    }
}

Ioc 模式(或依赖注入):

对象只需要声明它对服务的需求,使用 Ioc 模式的任何方面(构造函数、设置器或接口......等) 并且容器会尝试满足这个需求:

public class BLLObject 
{
    public IDal DalInstance { get; set; }

    public BLLObject(IDal _dalInstance)
    {
        DalInstance = _dalInstance;
    }
}

这意味着在工厂模式中,对象决定使用哪种创建方法(通过选择特定的具体工厂),但在 Ioc 模式中,由容器来选择。

当然,这不是唯一的尊重,但这是我暂时的想法。 如果我错了,请纠正我?

【讨论】:

    【解决方案2】:

    工厂模式是关于获取对类型的引用,因此在您的代码中的某处,您将调用工厂来解决某些问题。

    控制反转模式意味着您通常会使用 Ioc 容器来为您解决依赖关系。这可能类似于工厂的方式,或者更常见的是您会使用依赖注入将依赖项解析到构造函数或设置器中。

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 1970-01-01
      • 2010-11-09
      • 2017-07-31
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2012-12-14
      相关资源
      最近更新 更多