有一个异想天开的想法,不置可否实现。
A.dll:已经存在,包含了一些类,不希望被直接引用
B.dll:还不存在,可以被直接引用,但没有任何实质性内容,但希望能作为A.dll的一个Proxy
C.exe:引用B.dll,并使用其中的类,但实际上B.dll并不包含这些类,B.dll会把A.dll中的相关类返回
不知道c#能不能实现这样的想法,使得C.exe在引用了B.dll之后,就相当于引用了A.dll,可以自由地使用A.dll公开的所有资源。
B中定义A的接口,对A的实现静态注入即可实现。
有一点和你的不同,A必须引用B。
如果A,B互不知道,那就只能反射加载了。
AB互不知道,C怎么知道该调用什么类什么方法呢?B必须充当一个接口的角色(当然,接口定义到C里也可以,但不合逻辑),而A肯定得遵循这个接口,没有章法随便介入是不太可能的,这个要求应该就类似于插件的机制吧。
反射加载
应该可以实现的,.net 的 Web service 就是类似方法实现的。你仿照Web service 的方法来实现就可以了。
架构问题,b是个适配器,从a类抽象出接口吧,用工厂方法加载a类,反射加载。这样就可以用b类了,而且和a类松耦合