如何在wpf中使用prism创建另一个模块的类的实例而不添加引用
本文关键字:模块 实例 引用 添加 另一个 创建 wpf prism | 更新日期: 2023-09-27 18:29:47
我正在使用Prism 4.0和MEF开发WPF应用程序。我想在模块B的类B中创建模块A的类A的实例,并想在不添加模块B中模块A的任何引用的情况下访问类A的属性和方法。我知道棱镜提供了这个功能,但不知道如何做到。
我们在配置文件中指定了所有程序集,如下所示:
<modules>
<module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleA, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleA" startupLoaded="true"/>
<module assemblyFile="ModuleB.dll" moduleType="ModuleB.ModuleB,ModuleB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleB" startupLoaded="true"/>
</modules>
所有部件都以功能区面板中的"菜单"形式加载。
通常不直接使用Prism IModule实例,它们只是模块dll的入口点。继续说,我假设ModuleA.dll在ModuleB.dll中的某个地方实现了所需的功能。这确实是Prism的典型使用方式,但问题的解决方案更多地与MEF和依赖项注入有关:基本上,您可以为所需的任何功能创建一个接口,在A中实现该接口并使用该接口(即,不知道/不关心在B中在何处以及如何实现)。示例:
在SharedInterface项目中
public interface IMenuStuff
{
void DoSomething( .... )
}
在ModuleA项目中(引用SharedInterface项目)
[Export( typeof( IMenuStuff ) ]
public class MenuStuff : IMenuStuff
{
public void DoSomething( .... )
{
...
}
}
在ModuleB项目中(也参考SharedInterface项目)
[ModuleExport( typeof( ModuleB )]
class ModuleB : IModule
{
[Import]
private IMenuStuff Menu { get; set; }
public void Initialize()
{
//when reaching this point, and ModuleA was loaded properly
//Menu will have been set by MEF to the instance exported in ModuleA
}
}
我认为没有办法实现您需要对模块a的引用才能使用类a。无论如何,你可以尝试使用接口:
接口(C#编程指南)
接口属性(C#编程指南)