Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#工厂模式和IoC之间的差异_C#_Inversion Of Control_Design Patterns_Factory - Fatal编程技术网

C#工厂模式和IoC之间的差异

C#工厂模式和IoC之间的差异,c#,inversion-of-control,design-patterns,factory,C#,Inversion Of Control,Design Patterns,Factory,可能重复: 有人能解释一下(用简单的例子)工厂模式和控制反转模式之间的区别吗。最好使用.NET2.0,工厂模式是关于获取对类型的引用,因此在代码中的某个地方,您可以调用工厂来解决某些问题 控制反转模式意味着您通常会使用Ioc容器为您解决依赖关系。这可能与工厂的方式类似,或者更典型地,您可以使用依赖项注入将依赖项解析到构造函数或setter中。工厂模式: 需要引用服务的对象应该知道创建服务的工厂: public class BLLObject { public IDal DalInst

可能重复:


有人能解释一下(用简单的例子)工厂模式和控制反转模式之间的区别吗。最好使用.NET2.0,工厂模式是关于获取对类型的引用,因此在代码中的某个地方,您可以调用工厂来解决某些问题


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

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

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

    public BLLObject()
    {
        DalInstance = DalFactory.CreateSqlServerDal();
    }
}
Ioc模式(或依赖注入):

对象只需要使用Ioc模式的任何方面(构造函数、setter或接口等)向服务声明其需要 容器将尝试满足这一需求:

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

    public BLLObject(IDal _dalInstance)
    {
        DalInstance = _dalInstance;
    }
}
这意味着在工厂模式中,对象决定使用哪种创建方法(通过选择特定的具体工厂),但在Ioc模式中,则由容器来选择

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

你是指“工厂模式”还是“抽象工厂模式”?(后者在意义上更接近国际奥委会。)重复:@标记这个问题很可能是重复的,但不幸的是它没有被接受的答案。@chibacity:那么Q应该在你的帖子中清楚地解释为什么它不同。此外,向上投票的级别使得其他线程中的答案是可行的。询问者是否费心接受和/或通过解释现有答案中可能导致接受的缺失特征来进行跟进并不相关。如果人们觉得是这样,就悬赏吧。底线,这是一个非常相似的问题,所以附议VTC@Ruben我想了想,问了一个关于MSO的问题,我同意。我认为更重要的是,多次问同一个问题会使问题支离破碎。最好以副本的形式关闭,以直接返回到单个源。以重复形式结束也会让人们重新关注老问题。我投票决定结束。