.net - IoC 和托管加载项框架 (System.AddIn) 能否与隔离的 AppDomain 一起工作?

标签 .net dependency-injection add-in ioc-container maf

如果我使用托管加载项框架 (System.AddIn) 并将其设置为使用单独的 AppDomain,我可以使用主要/默认 AppDomain 中的集中式 IoC 容器吗? IoC 容器能否跨 AppDomain 解析?

最佳答案

我将通过忽略等式的 MAF 部分并专注于 AppDomain 问题来解决这个问题。 IoC 容器理论上可以执行您描述的操作,假设 IoC 入口点继承自 MarshalByRefObject 或由一个类包装,而该类又继承自 MarshalByRefObject。有了 29K+ 的代表分数,我相信您知道这一点,但是:

1) 从 MarshalByRefObject 继承的对象可以通过代理跨 AppDomain 边界访问(也就是说,所有调用都跨应用程序域边界编码到对象)。

2) 可序列化的对象可以通过序列化跨AppDomain边界传递,也就是说,您可以在另一个AppDomain中获得它们的另一个副本。

出于多种原因,您不希望序列化整个 IoC 容器并将其传送到 AppDomain 边界。首先,这样做的开销将是巨大的,其次,在 IoC 容器后面可能有很多管道是不可序列化的。因此,唯一可行的方法是:

1) IoC 容器本身是 MarshalByRef,或者被这样包裹

2) 您从 IoC 容器中获取的对象都已正确设置以供跨域使用(可序列化或 MBR 继承)。

如果以上两种情况都成立,那么理论上您可以从其他 AppDomains 使用托管在主 AppDomain 中的 IoC 容器。您可能会通过定义特定于 IoC 容器的 Resolve 方法(或您使用的 IoC 工具中的任何等效方法)的 MAF 主机适配器来执行此操作。

请记住,许多 IoC 功能(尤其是 AOP)是使用跨应用域通信也使用的相同代理 API 实现的。如果您尝试将 IoC 容器用于基本的可序列化结构和 MBR 继承服务以外的任何东西,我肯定会看到这会使事情复杂化。

关于.net - IoC 和托管加载项框架 (System.AddIn) 能否与隔离的 AppDomain 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5091383/

相关文章:

c# - Application.COMAddIns 下标超出范围

c# - 如何在纯托管 C# 中编写 IE 8 附加组件

c# - VB.NET 奇怪的 IF 语句行为,总是其他

java - 如何使用 Dagger-2 延迟注入(inject)接口(interface)?

java - 使用 dagger2 进行依赖注入(inject)时,我可以只注入(inject)父类(super class)吗?

javascript - 资源解释为脚本,但在注入(inject) angular-route.map 时以 MIME 类型 text/html 传输

c++ - 在非托管程序中托管 CLR 时从内存加载程序集

c# - 如何限制表单的水平移动?

c# - 使用 css 在同一行上设置 2 组 Label 和 editorFor 框

visual-studio-2008 - 是否有 VS2008 的插件来管理最喜欢的解决方案/项目?