在什么条件下,我可以将在编译时静态引用的程序集换成另一个在运行时使用的程序集?例如:
App Assembly:
ServiceProviderFactory
Common Assembly:
IServiceProvider
服务组装:
ServiceProviderFactory
(IServiceProvider
s的工厂)鉴于上述情况,我希望能够在安装时更换服务程序集,但我不知道新服务程序集将在什么条件下继续加载。
我认为必须坚持以下几点:
ServiceProviderFactory
签名保持不变。注意:使用反射并在服务程序集中搜索IServiceProvider
的实现似乎比依赖某些具有固定签名的ServiceProviderFactory
似乎更好但我仍然对答案感兴趣以上。
答案 0 :(得分:1)
如果它的名称很强,那么除了版本差异之外,你不能真正使用程序集重定向。但是,您可以使用AppDomain.AssemblyResolve事件来提供程序集,以响应绑定请求的程序集的失败。
当我尝试支持引用MEF的已发布版本的.NET 4应用程序中引用了MEF的CodePlex版本的.NET 2.0程序集时,我实际上尝试了这个作为概念验证。这是一个link to my question,有人用这个邪恶的伎俩作出回应。
然而,这一切都非常棘手,我觉得在实际应用中做这件事并不舒服。您是否可以将接口提取到单独的程序集中,然后使用某种依赖注入(如MEF或Unity)来动态加载实现这些接口的类型?