如何为基类创建可选类型注入?

问题描述:

在常规的敏捷编程技术过程中,我经常做很多重构。如果我找到共同的东西,他们就是基础班的候选人。假设这个代码模式:如何为基类创建可选类型注入?

public Subclass : BaseClass{ 
    private dynamic SomeValue = null; 
    public Subclass(){ 
     SomeValue = BaseClass.Method<T>(); 
    } 
} 

一切工作正常,直到我厌倦了不断注入式进入方法。为什么不把类型注入基类呢?但是请稍等,我不想重复使用上面这种模式的20个课程。现在我有两种可以使用的潜在模式,这是第二种。

public Subclass : BaseClass<T>{ 
    private T SomeValue = null; 
    public Subclass(){ 
     SomeValue = BaseClass.Method(); 
    } 
} 

该第二图案可以是第一实施例的逻辑推导由此我们只是移动的类型的类CTOR,而不是使用在每种方法的通用类型。

我想问问社区他们的想法如何在不改变任何当前代码的情况下完成这两个构造,而是添加支持泛型类型基类模式。

我已经阅读过其他大多数关于StackOverFlow Nazi Soup警察关闭的“可选泛型类型”的帖子。

+2

只要不使用继承,你不会有“注入”任何东西。不应该使用继承来提取公共代码 - 这是一种代码味道。它只应该用来指定“是-A”关系。使用构图,控制反转和真实注入 - 即将想要的类的接口传递给构造函数,并使用DI容器来自动执行构建过程 – 2015-04-01 11:57:06

+0

@PanagiotisKanavos谢谢,这就是我正在寻找的答案。 – 2015-04-01 11:58:00

再一次,四人帮是对的“赞成继承”。在这种情况下,BaseClass这个术语可能并不合适,但是您可以看到我们的基类概念在开始时是如何错误的,因为它并不真正问“这真的是Base类吗?”

public Subclass { 
    private BaseClass bc1 = null; 
    private BaseClass<SomeType> bc2 = null; 
    private dynamic SomeValue = null; 
    public Subclass(){ 
    //I still have base class operation ability, but now... 
    bc2 = new BaseClass<SomeType>(); 
    SomeValue = bc2.Method(); 
} 

}