【发布时间】:2012-10-15 14:54:31
【问题描述】:
将 Prism 与 WPF 结合使用,我希望允许用户从存储库中选择他们想要使用的模块。每个模块本质上都是一个附加组件,选择要使用的模块只需将其移动到 DLL 的“模块”文件夹中即可加载。
但是,在应用程序运行时尝试移动 DLL,会引发错误,因为此时 DLL 正在使用中。您如何解决这个问题并允许用户随意添加/删除模块?
【问题讨论】:
-
您使用的是 Unity 还是 MEF。您需要使用 MEF 来允许动态加载模块。 danielvg.dk/post/2010/02/13/Unity-vs-MEF-vs-PRISM.aspx .... forums.silverlight.net/t/227834.aspx/1
-
我正在使用 Unity,此时我正在成功地从文件夹中动态加载。很多人说只有MEF可以做到这一点,这是不正确的,至少就发现模块而言。我想更具体地说,我想看看我是否可以在运行时卸载模块(以便可以更新/删除 DLL)。使用 MEF 而不是 Unity 是否可以做到这一点?
-
一旦程序集被加载到 AppDomain 中,它不会被卸载,直到 AppDomain 被拆除......我想这是你的问题。如果你在网上看,有一些技术可以解决这个问题......例如创建一个额外的 AppDomain,然后您可以关闭它......但是您必须使用 MarshalByRef 在 AppDomains 之间编组调用。 stackoverflow.com/questions/6578170/…
-
这是有道理的。谢谢您的意见。我想我找到了解决方法,至少允许用户“添加/删除”模块。我只是在引导程序之前启动的登录屏幕上添加了一个“配置模块”选项。这将在加载之前根据需要从文件夹中复制/删除模块。另外,你想把它放在回复中以便我可以将其标记为答案吗?