如何在不使用WPF棱镜添加参考创建类另一个模块的一个实例(how to create an inst

2019-10-18 13:44发布

我正在使用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>

所有的组件被加载在菜单中的在功能区面板的形式。

Answer 1:

通常情况下,你不直接使用棱镜的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
  }
}


Answer 2:

我觉得疗法是没有办法实现的,你需要一个参考模块A使用A级,反正你可以尝试使用接口:

接口(C#编程指南)

接口属性(C#编程指南)



文章来源: how to create an instance of a class of another module without adding reference using prism in wpf