从 Activator.CreateInstance() 处理实例
Posted
技术标签:
【中文标题】从 Activator.CreateInstance() 处理实例【英文标题】:Disposing Of An Instance from Activator.CreateInstance() 【发布时间】:2021-11-13 19:35:45 【问题描述】:我有一个带有插件系统的软件,它使用 Assembly.Load() + Activator.CreateInstance() 加载 DLL。我遇到的问题是插件使进程保持打开状态,例如,如果我关闭主窗口,进程仍然在后台保持打开状态并且无法正确关闭。
我的问题是,是否可以删除/卸载由 Activator.CreateInstance() 创建的实例?我尝试将对象设置为 null 并按照另一个问题中的建议调用 GC.Collect() ,但这无济于事......
async public void AddServerModule(Assembly module)
Type type = module.GetType("ModularModule.ModularModule");
object instance = Activator.CreateInstance(type, new object[] this );
...
【问题讨论】:
是IDisposable
那么你可以使用using
块,如果不是为什么不呢?
您是否建议让插件使用IDisposable?
if(instance is IDisposable d) d.Dispose();
(+ 异常处理等)。否则,强制type
实现一些接口,该接口扩展IDisposable
。
我从未听说过加载程序集保持进程运行。当这发生在我身上时,是因为我启动了一个线程,没有将其标记为后台线程并让它运行。这个程序集有什么特别时髦的地方吗?
@JeremyLakeman 成功了,谢谢。
【参考方案1】:
我通过使插件成为一次性插件解决了这个问题,然后在 Dispose() 方法中调用 Close()。
【讨论】:
我建议改用using
块,这样可以正确处理异常以上是关于从 Activator.CreateInstance() 处理实例的主要内容,如果未能解决你的问题,请参考以下文章