0

是否可以实现工厂并在构造函数中获取类型,所以 .CreateInstace() 将是无参数的,或者这将是反模式,我应该尽我所能避免它?

我假设在系统运行时,工厂应该只实例化一种预定义类型

4

2 回答 2

0

对我来说,。那是因为稍后您的工厂在依赖注入期间不能足够灵活或很难,例如:

public class Factory{
    public Factory(Type t, IocContainer con){
       // param assignments
    }
    public IClass GetInstance(){
        return con.Resolve<t>();
    }
}

会让您对注入的内容感到困惑(其中两个彼此无关。一个是类型?另一个是IocContainer?它也使您Factory有状态。此外,如果我注入接口类型怎么办?您的工厂可以创建一个类从界面?

相反,您为什么不直接接受课程本身?

public class Factory{
    public Factory(IClass cls){
       // param assignments
    }
    public IClass GetInstance(){
        return cls;
    }
}

这是更加自我记录和清晰的。

于 2013-10-21T12:38:12.870 回答
0

我假设在系统运行时,工厂应该只实例化一种预定义类型

不一定,因为这将迫使您为您希望创建的每个具体类型创建一个工厂类。

构造函数注入(即通过构造函数提供类型)通常优于方法注入(即通过方法调用中的参数提供类型),但正如我所说,如果工厂需要根据参数创建多个类型怎么办在运行时传递给它,那么将这些参数传递给createInstance()方法会更方便,而不是为每个类型创建一个新工厂。

归根结底,我通常更喜欢将参数传递给createInstance()方法,并通过构造函数为工厂提供完成其工作所需的任何东西。

于 2013-10-21T12:41:07.443 回答