Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 从使用Activator.CreateInstance(类型)创建的实例捕获异常_C#_Plugins_Exception Handling - Fatal编程技术网

C# 从使用Activator.CreateInstance(类型)创建的实例捕获异常

C# 从使用Activator.CreateInstance(类型)创建的实例捕获异常,c#,plugins,exception-handling,C#,Plugins,Exception Handling,我有一个C#应用程序,可以用Activator.CreateInstance(类型)加载其他DLL,它实现了一个给定的接口(插件) 现在,我想在新实例自己的异常处理程序中捕获从该实例引发的所有异常(因为我无法确定插件是否正确处理了每个异常),以显示如下消息: 插件[PluginName]导致以下错误:[异常。消息] 我可以订阅AppDomain.CurrentDomain.UnhandledException事件,但这会捕获所有异常,不仅是由某个插件引起的异常,而且我也看不到[是什么]插件引起了

我有一个C#应用程序,可以用Activator.CreateInstance(类型)加载其他DLL,它实现了一个给定的接口(插件)

现在,我想在新实例自己的异常处理程序中捕获从该实例引发的所有异常(因为我无法确定插件是否正确处理了每个异常),以显示如下消息:

插件[PluginName]导致以下错误:[异常。消息]

我可以订阅AppDomain.CurrentDomain.UnhandledException事件,但这会捕获所有异常,不仅是由某个插件引起的异常,而且我也看不到[是什么]插件引起了异常

是否可以为创建的实例分配异常处理程序

提前感谢,

Frank

我不确定我是否理解您的具体场景,但解决方案可能是围绕插件对象创建一个包装类,以确保正确处理所有潜在的异常:

 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 ...
      }
 }
公共接口IPluginObject
{
void Foo();
伊布拉·巴尔();
...
}
公共包装器:IPluginObject,其中T:IPluginObject
{
私有只读T内部;
公共包装器(ipluginobj){inner=obj;}
公共图书馆
{
请尝试{inner.Foo()}
抓住。。。。
最后
}
公共伊布拉酒吧()
{
请尝试{return inner.Bar();}
抓住。。。
最后
}
}

笨重的?是的,但您确实可以从确切知道哪个插件比较麻烦中获益

你完全理解我的想法!但是,在插件的方法中也可能存在不直接从Plugincontainer调用的例外。F.e.所有插件都必须提供一个显示在主程序ContentControl中的UserControl。在这个UsreControl中,可以是任何类型的方法调用,这些方法调用对于main来说都是未知的program@Aaginor哦,那样的话,这不行。