是否可以实现工厂并在构造函数中获取类型,因此.CreateInstace()将是无参数的,或者这将是反模式的,我应该尽力避免它?
我假设在系统运行时期间,工厂只应实例化一个预定义类型
答案 0 :(得分:0)
对我而言,否。这是因为你的工厂后期在依赖注入时不够灵活或不够坚固,因为:
public class Factory{
public Factory(Type t, IocContainer con){
// param assignments
}
public IClass GetInstance(){
return con.Resolve<t>();
}
}
会让你对被注入的内容感到困惑(其中2个是彼此无关的。一个是类型?另一个是IocContainer
?这也使你的Factory
有状态。此外,如何如果我注入接口类型?你的工厂可以从接口创建一个类吗?
相反,你为什么不接受这个班级呢?
public class Factory{
public Factory(IClass cls){
// param assignments
}
public IClass GetInstance(){
return cls;
}
}
这是更加自我记录和清晰的。
答案 1 :(得分:0)
我假设在系统运行时期间,工厂只应实例化一个预定义类型
不一定会因为这会强制您为要创建的每种具体类型创建工厂类。
构造函数注入(即通过构造函数提供类型)通常优于方法注入(即通过方法调用中的参数提供类型),但是我说如果工厂需要根据在运行时传递给它的参数创建多个类型,那么将这些参数传递给createInstance()
方法而不是每个创建一个新工厂会更方便类型。
最重要的是,我通常更喜欢将参数传递给createInstance()
方法,并通过构造函数向工厂提供完成工作所需的任何内容。