如果我使用Managed AddIn Framework(System.AddIn)并将其设置为使用单独的AppDomain,我可以使用主/默认AppDomain中的集中式IoC容器吗? IoC容器可以跨AppDomains解析吗?
答案 0 :(得分:4)
我将通过忽略等式的MAF部分来解决这个问题,并专注于AppDomain问题。假设IoC入口点继承自MarshalByRefObject或由一个继承自MarshalByRefObject的类包装,理论上IoC容器可以执行您所描述的操作。凭借29K +的得分,我相信你知道这一点但是:
1)继承MarshalByRefObject的对象可以通过代理跨AppDomain边界访问(也就是说,所有调用都在appdomain边界内编组到对象)。
2)可序列化的对象可以通过序列化传递到AppDomain边界,也就是说,您可以在另一个AppDomain中获取它们的另一个副本。
由于多种原因,您不希望序列化整个IoC容器并将其通过AppDomain边界发送。首先,这样做的开销将是巨大的,其次,IoC容器背后可能存在许多不可序列化的管道。因此,唯一可行的方法是:
1)IoC容器本身是MarshalByRef,或被这样的
包裹和
2)您从IoC容器中获取的对象都已正确设置以供跨域使用(可序列化或MBR继承)。
如果上述两种情况都属实,那么理论上您可以使用其他AppDomain主AppDomain中托管的IoC容器。您可能通过定义特定于IoC容器的Resolve方法的MAF主机适配器(或您使用的IoC工具中的等效方法)来实现此目的。
请记住,使用跨应用程序域通信也使用的相同代理API实现了大量IoC功能(尤其是AOP)。如果你试图将IoC容器用于基本的可序列化结构和MBR继承服务以外的任何东西,我肯定会看到这种复杂的事情。