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