2016-12-21 5 views
2

Activator.CreateInstance(type)で他のDLLを読み込み可能なC#アプリケーションがあり、これは特定のインターフェイス(プラグイン)を実装しています。Activator.CreateInstance(type)で作成したインスタンスから例外をキャッチ

今、私は(私はすべての例外が適切にプラグインによって処理されていることを確認することができないため)のようなメッセージを提示するためにそれ自身の例外ハンドラでは、その新しいインスタンスからスローされたすべての例外をキャッチしたい:

Plugin [PluginName] caused the following error: [Exception.Message]

私はAppDomain.CurrentDomain.UnhandledExceptionイベントを購読することができますが、これは特定のプラグインによって引き起こされるものだけでなく、すべての例外をキャッチします。また、そのプラグインが例外を引き起こしたこともわかりません。

作成したインスタンスに例外ハンドラを割り当てることはできますか?事前に

おかげで、
フランク

答えて

0

私は私はあなたの正確なシナリオを理解してないんだけど、解決策は、すべての潜在的な例外が処理されていることを確認することの世話をするプラグインオブジェクトのラッパークラスを作成することができ正しく:

public interface IPluginObject 
{ 
     void Foo(); 
     IBlah Bar(); 
     ... 
} 

public Wrapper<T>: IPluginObject where T: IPluginObject 
{ 
     private readonly T inner; 

     public Wrapper(IPlugin obj) { inner = obj; } 

     public void Foo() 
     { 
      try { inner.Foo() } 
      catch .... 
      finally ... 
     } 

     public IBlah Bar() 
     { 
      try { return inner.Bar(); } 
      catch ... 
      finally ... 
     } 
} 

かっこいいですか?はい、あなたはですは、どのプラグインが面倒であるかを正確に知るという利点があります。

+0

あなたは私のシナリオをかなり正確に理解しました!しかし、PluginContainerから直接呼び出されないプラグインのメソッドには、exeptionsが存在することもあります。 F.e.すべてのプラグインは、メインプログラムのContentControlに表示されるUserControlを提供する必要があります。そして、このUsreControlには、メインプログラムには知られていないあらゆる種類のメソッド呼び出しがあります。 – Aaginor

+0

@Aaginorああ、その場合はこれはできません。 – InBetween

関連する問題