Mar*_*ner 5 .net assemblies interface
我想实现涉及不同.NET 程序集(即模块)的体系结构。其中一些模块应该提供由其他模块用作 .NET 接口的服务。这些模块应该在运行时动态加载和注册,我不想在它们之间有“硬编码”的依赖关系。
例子:
模块1.dll:
定义一个实现接口 IService1 的类
模块2.dll:
通过接口 IService1 使用 Module1 提供的类
问题是在哪里放置 的定义IService1:两个模块都需要这个定义。但由于Module2也应该在没有Module1(在运行时检查服务的可用性)的情况下工作,我不想直接Module2.dll 引用Module1.dll。
一种可能性是将每个模块分成两个程序集(接口和定义),但这意味着我不需要的 DLL 数量增加了一倍。
我还考虑过使用一个单独的“Interface Dll”,即包含所有接口定义的一个程序集,但话又说回来,如果我更改一个接口或添加新模块(使用新的 iterfaces),我需要更新这个中央 DLL 并因此所有其他模块(因为它们都依赖于它......)
我想要的是将接口定义链接到 和Module1,Module2但我不知道是否分别。这怎么可能。
我很感激任何想法
编辑
也许这个例子有点太简单了:可能有一种情况Module1a.dll,Module1b.dll等 提供IService和等Module2a.dll的实现Module2b.dll正在使用它们......
Module2.dll应该声明IService并且Module1.dll应该引用Module2.dll。然后,Module2.dll应该使用反射(可能使用配置设置)来创建声明的类型Module1.dll并将其强制转换为IService:
// in module2.dll
var serviceInstance = (IService)Activator.CreateInstance(typeToLoad);
Run Code Online (Sandbox Code Playgroud)