C# 使用MAF(Microsoft加载项框架)的AppDomainUnloadexception
当调用使用MAF(System.addin)托管的加载项时,我会在一些机器上不时出现AppDomainUnloadexCPtion。我的管道是这样的:C# 使用MAF(Microsoft加载项框架)的AppDomainUnloadexception,c#,.net,remoting,maf,system.addin,C#,.net,Remoting,Maf,System.addin,当调用使用MAF(System.addin)托管的加载项时,我会在一些机器上不时出现AppDomainUnloadexCPtion。我的管道是这样的: [AddInContract] public interface IGatewayV2 : IContract { ITopUpResultContract TopUpPhoneAccount(ITopUpRequestContract request); } 这是我的主机适配器: [HostAdapterAttribute()]
[AddInContract]
public interface IGatewayV2 : IContract
{
ITopUpResultContract TopUpPhoneAccount(ITopUpRequestContract request);
}
这是我的主机适配器:
[HostAdapterAttribute()]
public class GatewayContractToViewHostSideAdapter : Dogs.Pipeline.HostView.IGatewayV2
{
private Dogs.Pipeline.Contracts.IGatewayV2 _contract;
private ContractHandle _handle;
public GatewayContractToViewHostSideAdapter(Dogs.Pipeline.Contracts.IGatewayV2 contract)
{
_contract = contract;
_handle = new ContractHandle(contract);
}
public TopUpResult TopUpPhoneAccount(TopUpRequest request)
{
var topupRequestViewToContractHostSideAdapter = new TopUpRequestViewToContractHostSideAdapter(request);
return
new TopUpResultContractToViewHostSideAdapter(
_contract.TopUpPhoneAccount(topupRequestViewToContractHostSideAdapter));
}
}
始终在主机适配器端,我有一个topupRequestViewToContractHostSideAdapter:
class TopUpRequestViewToContractHostSideAdapter : ContractBase, ITopUpRequestContract
{
private TopUpRequest _topUpRequest;
public TopUpRequestViewToContractHostSideAdapter(TopUpRequest topUpRequest)
{
this._topUpRequest = topUpRequest;
}
//properties here
)
以及一个TopUpResultContractToViewHostSideAdapter,用于处理对外部appdomain的引用:
public class TopUpResultContractToViewHostSideAdapter : TopUpResult
{
private ITopUpResultContract _contract;
private ContractHandle _handle;
public TopUpResultContractToViewHostSideAdapter(ITopUpResultContract contract)
{
this._contract = contract;
_handle = new ContractHandle(contract);
}
//properties here
}
在addin端,我有以下代码:
[AddInAdapter()]
public class GatewayViewToContractAddInSideAdapter : ContractBase, Dogs.Pipeline.Contracts.IGatewayV2
{
private Dogs.Pipeline.AddinViewV2.IGatewayV2 _view;
public GatewayViewToContractAddInSideAdapter(Dogs.Pipeline.AddinViewV2.IGatewayV2 view)
{
this._view = view;
}
public ITopUpResultContract TopUpPhoneAccount(ITopUpRequestContract request)
{
var result = _view.TopUpPhoneAccount(new TopUpRequestContractToViewAdapter(request));
return new TopUpResultViewToContractAdapter(result);
}
}
其中TopUpResultViewToContractAdapter是:
public class TopUpResultViewToContractAdapter : ContractBase, ITopUpResultContract
{
private TopUpResult _topUpResult;
public TopUpResultViewToContractAdapter(TopUpResult result)
{
this._topUpResult = result;
}
//properties here
}
TopUpRequestContractToViewAdapter是:
public class TopUpRequestContractToViewAdapter : TopUpRequest
{
private ITopUpRequestContract _contract;
private ContractHandle _handle;
public TopUpRequestContractToViewAdapter(ITopUpRequestContract contract)
{
_contract = contract;
_handle = new ContractHandle(contract);
}
//properties here
}
所有内容似乎都符合我迄今为止阅读的内容,特别是我可以在以下链接中阅读的内容:
所以我想知道我是否做错了什么,或者有可能管道在某些机器上不工作(因为我不是在所有用于测试的机器上都有问题)
谢谢您的提示。您如何激活加载项?如果它正在作为一个单独的应用程序域进行处理,那么您可以连接到AppDomainUnhandledException@g.cacciapaglia-你解决过这个问题吗?有一个类似的问题!不,我搬到了另一家公司,在那之前问题仍然存在。无论如何,我强烈建议不要使用MAF,因为即使是微软似乎也没有考虑这个框架(我想它仍然存在,因为向后兼容的原因)。