Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MAF(Microsoft加载项框架)的AppDomainUnloadexception_C#_.net_Remoting_Maf_System.addin - Fatal编程技术网

C# 使用MAF(Microsoft加载项框架)的AppDomainUnloadexception

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()]

当调用使用MAF(System.addin)托管的加载项时,我会在一些机器上不时出现AppDomainUnloadexCPtion。我的管道是这样的:

[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,因为即使是微软似乎也没有考虑这个框架(我想它仍然存在,因为向后兼容的原因)。