Autofac注册多个接口层次结构,多个具体类



我似乎没有找到我这种问题的答案。 所以,假设有一个接口

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继承可能是有意义的,但没有更多的背景,我真的不能说。

希望我正确理解你的问题。

最新更新