2009-06-18 3 views
3

System.AddIn名前空間に実装されている.NET Framework(現在3.5 SP1を使用)によって提供されるAddInフレームワークの使用に関する質問があります。私は単純なAddInでプロトタイプを構築します。このAddInは、WCFサービスのビジネスロジックでインスタンス化されます。ビジネスロジックのWCFのSystem.AddIn

実装(のみ必要なコードが表示されている):サービスの

internal class BusinessLayer : IBusinessLayer 
{ 
    public object Execute(object toConvert, Operation operation) 
    { 
     IDictionary<string, AddInToken> tokens = AddIns.Store.GetAddInsTokens(@"c:\SomePathToStore"); 

     foreach (KeyValuePair<string, AddInToken> token in tokens) 
     { 
      if (operation.Name == token.Key && operation.Version == token.Value.Version) 
      { 
       ConversionHostView view = token.Value.Activate<ConversionHostView>(AddInSecurityLevel.FullTrust); 

       object converted = view.Convert(toConvert); 

       AddInController.GetAddInController(view).Shutdown(); 

       return converted; 
      } 
     } 

     throw new InvalidOperationException("No operation found!"); 
    } 
    ... 
} 

実装(のみ必要なコードが表示されます):

public class Service : IServiceContract 
{ 
    IBusinessLayer bl; 

    public Service() 
    { 
     bl = BL.BLFactory.GetBL(); 
    } 

    public object Execute(object toConvert, ERES.ConversionService.Entity.Operation operation) 
    { 
     return bl.Execute(toConvert, operation); 
    } 
    ... 
} 

は、私は2つのユニットテストを作成しました。ビジネスロジックの1つの直接呼び出しメソッド、他の1つのWCFメソッド。直接の呼び出しが正常に動作しますが、私はWCFからアドインを有効にした場合、私はこの例外を取得:

「『ERES.ConversionService.Contract.IConversionContract』

スタックトレース入力する透過プロキシをキャストすることができません:

をSystem.AddIn.Hosting.AddInActivator.ActivateInAppDomainでSystem.AddIn.Hosting.AddInActivator.AdaptToHost [T](AddInTokenパイプライン、IContract addInContract) でConversionHostViewToContractAdapter_ConstructorInvoker(オブジェクト) [T](AddInTokenパイプライン、アプリケーションドメインのドメイン、AddInControllerImplで

コントロ充填剤、System.AddIn.Hosting.AddInActivator.Activate [T](AddInTokenトークン、AddInSecurityLevelレベルでSystem.AddIn.Hosting.AddInActivator.Activate [T](AddInTokenトークンのPermissionSetのPermissionSet、ストリングappDomainName) ブールweOwn) 、 ERES.ConversionService.BLでSystem.AddIn.Hosting.AddInToken.Activate [T](AddInSecurityLevel trustLevel) でSystem.AddIn.Hosting.AddInActivator.Activate [T](AddInTokenトークン、AddInSecurityLevelレベル) でストリングappDomainName) 。 Visual Studio 2008 \ Projects \ ConversionServiceSolution \ ERES.ConversionService.BL \ BusinessLayer.cs:ERES.ConversionService.Serviceの行44 で、BusinessLayer.Execute(Object toConvert、Operation操作)をC:\ Documents and Settings \ kc \ My Documents \ C:\ Documents and Settings \ kc \ My Documents \ Visual Studの.Execute(Object toConvert、Operationオペレーション) SyncInvokeExecute(Object、Object []、Object [])の at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance、Object [ 】入力、オブジェクト[] &出力)System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc & RPC)

任意の助けで ?

よろしく アントンKalcik

UPDATE:私はこのコードでこれを一周することができた :だから

ConversionHostView view = token.Value.Activate<ConversionHostView>(AppDomain.CurrentDomain); 

この場合では、唯一のと同じのAppDomainでアドインを実行することしかできませんサービス自己。しかし、なぜ私は理解していないのですか?

答えて

0

エラーがどこで発生しているかを見ると、アドインがホストに適合しているときです。

ここでの問題は、MEFが見つけることができないインターフェイスにMEFがキャストしようとしていることです。

契約アセンブリは、アドインアセンブリと同じ場所にありますか?

+0

申し訳ありませんが、2年前と同じプロトタイプだったので、もうコードはありません。ありがとうございました。 –

関連する問題