我似乎没有找到我这种问题的答案。 所以,假设有一个接口
public interface IBase {
void MethodBase();
}
和一个实现这个的类,基类不是抽象的(。现在我必须有另一个类来实现基本接口,但也要添加新方法(扩展默认行为(,所以我正在制作我的第二个接口,
如下所示public interface IChild : IBase {
void MethodChild();
}
以及实现此类的类,例如 ChildClass。
现在一切都很好。现在是IoC和Autofac的问题。我希望在应用程序启动时有条件地注册为 IBase(因为项目在其他部分使用 IBase(第一个或第二个具体类。
问题是,在消费类中,在其构造函数中,我是否应该有一个 IBase 类型的参数,并且在其方法之一中我应该这样做
(baseTypeParam as IChild)
并使用IChild接口添加的新方法之一? 因为如果构造函数参数是 IChild 类型,并且正如我所说,我向 ChildClass 注册 IBase,那么一切都失败了,因为显然没有注册 IChild。
或者我缺少一些关于如何使用新方法扩展(设计模式?(基本接口的东西,BaseClass 不应该实现这些接口。
您不能将父级转换为子项,因为您不知道 IBase 引用的实现实际上实现了 IChild 方法。如果你的类需要 IChild 中定义的方法,它应该要求 IChild。
一个更干净的解决方案是有两个IBase的实现,而不是从IBase继承IChild。然后,您可以根据启动参数注册所需的IBase实现,并有一个单独的类实现IChild。
public interface IBase {
void DoSomething();
}
public class Base1 : IBase{
public void DoSomething() { \do something }
}
public class Base2 : IBase{
public void DoSomething() { \do something }
}
public interface IChild{
void DoSomethingElse();
}
public class Child1{
public void DoSomethingElse() { \do something else }
}
public class IDoSomething{
public IDoSomething(IBase base){}
}
public class IDoMoreThings{
public IDoMoreThings(IBase base, IChild child){}
}
我知道IChild从IBase继承可能是有意义的,但没有更多的背景,我真的不能说。
希望我正确理解你的问题。