如果我使用托管 AddIn 框架 (System.AddIn) 并将其设置为使用单独的 AppDomain,我可以使用主/默认 AppDomain 中的集中式 IoC 容器吗? IoC 容器可以跨 AppDomain 解析吗?
我将通过忽略等式的 MAF 部分并专注于 AppDomain 问题来接近这个答案。理论上,IoC 容器可以执行您所描述的操作,假设 IoC 入口点继承自 MarshalByRefObject 或由一个继承自 MarshalByRefObject 的类包装。凭借 29K+ 的重复分数,我相信您知道这一点,但是:
1) 从 MarshalByRefObject 继承的对象可以通过代理跨 AppDomain 边界访问(即,所有调用都跨 AppDomain 边界编组到对象)。
2)可序列化的对象可以通过序列化跨AppDomain边界传递,也就是说,您可以在另一个AppDomain中获得它们的另一个副本。
由于多种原因,您不希望序列化整个 IoC 容器并将其运送到 AppDomain 边界。首先,这样做的开销将是巨大的,其次,IoC 容器背后可能存在大量不可序列化的管道。因此,唯一可能的方法是:
1)IoC容器本身是MarshalByRef,或者被这样的包装
and
2) 从 IoC 容器获取的对象都已正确设置为跨域使用(可序列化或 MBR 继承)。
如果上述两个条件都成立,那么理论上您可以从其他 AppDomain 使用主 AppDomain 中托管的 IoC 容器。您可能会通过定义特定于 IoC 容器的 Resolve 方法(或您使用的 IoC 工具中的任何等效方法)的 MAF 主机适配器来实现此目的。
请记住,许多 IoC 功能(尤其是 AOP)是使用跨应用程序域通信也使用的相同代理 API 来实现的。如果您尝试将 IoC 容器用于除基本可序列化结构和 MBR 继承服务之外的其他用途,我肯定会看到事情变得复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)