我正在使用Prism 4.0和MEF WPF应用程序。 我想创建在模块B的B类的模块A的类A的实例和要访问的属性和一类的方法,而没有增加在模块B.模块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>
所有的组件被加载在菜单中的在功能区面板的形式。
通常情况下,你不直接使用棱镜的IModule的情况下,他们只是作为一个切入点,模块的DLL。 继续对我假设ModuleA.dll地方实现功能所需要的ModuleB.dll。 这的确是怎样棱镜通常使用,但问题的解决方案更多的与MEF和依赖注入:基本上你创建你需要的任何功能的接口,实现在A中的界面和使用界面(即不知道/关心在那里,它是如何在B.示例实现:
在SharedInterfaces项目
public interface IMenuStuff
{
void DoSomething( .... )
}
在ModuleA项目(引用SharedInterfaces项目)
[Export( typeof( IMenuStuff ) ]
public class MenuStuff : IMenuStuff
{
public void DoSomething( .... )
{
...
}
}
在ModuleB项目(其中还引用SharedInterfaces项目)
[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#编程指南)
文章来源: how to create an instance of a class of another module without adding reference using prism in wpf