我正在创建一些集成库,它将接受各种接口实现以使其运行。
我有一个设置:
文库
interface IModule {
void Init();
}
interface IExample : IModule {
void DoSomething();
}
class Core {
IExample Example {get; private set;}
}
Core类正在查找IModule类型的每个属性,并且对于每种类型,基于外部配置分配实现属性类型接口的实例对象。
然后我有一个满足Core要求的模块。
class MyExampleModule : IExample {
public void Init() { }
public void DoSomething() { }
public void ExampleFeature1() { }
public void ExampleFeature2() { }
}
我想在.dll中关闭模块MyExampleModule,我希望它在没有Core的环境中运行,它是IExample和IModule接口。 (我想要一个.dll,而不是两个环境w /和那些接口)。
有没有办法在C#中实现这一目标?如果不是(仅仅出于好奇的原因)是否有可能的语言?
答案 0 :(得分:2)
不,你不能。 CLR需要与接口组装,因为它需要知道它们的外观。但是,如果您担心运送两个程序集(为什么?),则可以将它们与ILMerge合并。然而,这带来了其他问题和考虑因素。你打算将另一个模块与核心合并吗?这可能会导致运行时异常。
我不知道另一种可以做你想做的.NET语言。事实上,我怀疑还有其他语言支持实现代码附带的接口。