【问题标题】:Need help converting PRISM Unity Module Init to PRISM MEF Module Init需要帮助将 PRISM Unity Module Init 转换为 PRISM MEF Module Init
【发布时间】:2011-09-24 21:54:33
【问题描述】:

我需要帮助转换以下类以在我正在开发的程序中使用。最初是来自IdeaBlade 的一个名为"PRISM EXPLORER" 的演示程序,基于Unity。我需要帮助将一部分从 UNITY 转换为 MEF。我处理了其他所有事情。就卡在这个了。我已经用 MEF“[EXPORT(typeof(XXX))]”标记了我的课程,我认为我需要以某种方式使用“ComposeExportedValue”。令人困惑的部分是找到这条线的等价物:

var provider = 
    (IEntityManagerProvider) _container.Resolve<IPersistenceGateway>();
  _container.RegisterInstance<IEntityManagerProvider>(provider);

谢谢!

以下是我需要转换的整个类。你可以在这里找到原文:Ideablade PRISM Page

using Microsoft.Practices.Composite.Modularity;
using Microsoft.Practices.Composite.Regions;
using Microsoft.Practices.Unity;
using PrismExplorer.Infrastructure;
namespace ModelExplorer.Explorer {
  public class ExplorerModule : IModule {

    private readonly IUnityContainer _container;

    public ExplorerModule(IUnityContainer container) {
      _container = container;
    }

    public void Initialize() {
      InitializeContainer();
      SetViews();
    }

    // ToDo: Consider getting from configuration
    private void InitializeContainer() {
      RegisterGatewayAndEntityManagerProvider();

      _container.RegisterType<IQueryRepository, QueryRepository>(
        new ContainerControlledLifetimeManager()); // singleton
    }

    private void RegisterGatewayAndEntityManagerProvider() {
      _container.RegisterType<IPersistenceGateway, PrismExplorerPersistenceGateway>(
        new ContainerControlledLifetimeManager()); // singleton

      var provider = 
        (IEntityManagerProvider) _container.Resolve<IPersistenceGateway>();
      _container.RegisterInstance<IEntityManagerProvider>(provider);
    }

    private void SetViews() {
      var regionManager = _container.Resolve<IRegionManager>();

      var view = _container.Resolve<ExplorerView>();
      regionManager.AddToRegion(RegionNames.MainRegion, view);

      regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(ExplorerView));
    }


    // Destructor strictly to demonstrate when module is GC'd
    //~MevModule() {
    //  System.Console.WriteLine("Goodbye, MevModule");
    //}

  }
}

【问题讨论】:

    标签: prism unity-container mef devforce


    【解决方案1】:

    CompositionContainer 上的两个对应方法是 ComposeExportedValue&lt;T&gt;(...),它允许您将特定实例添加到容器中,GetExportedValue&lt;T&gt;(...) 从容器中获取 T 的实例。

    如果您可以设计您的类型以减少这种服务位置的使用并尝试并更喜欢构造函数注入,它将使您的代码更易于维护和测试。例如,您的代码是否可以转换为:

    [Export(typeof(IModule))]
    public class ExplorerModule : IModule
    {
        [ImportingConstructor]
        public ExplorerModule(IPersistenceGateway gateway)
        {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多