0

私が開発中のプログラムで使用するために、次のクラスを変換するのに助けが必要です。オリジナルは、に基づいてIdeaBlade呼び出された からのデモ プログラムでした。一部のパーツを UNITY から MEF に変換するのに助けが必要です。私は他のすべてを扱いました。これに固執しただけです。私は既に自分のクラスに MEF "[EXPORT(typeof(XXX))]" を付けており、何らかの方法で "ComposeExportedValue" を使用する必要があると思います。紛らわしい部分は、この行の等価物を見つけることです:"PRISM EXPLORER"Unity

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

ありがとう!

以下は、変換する必要があるクラス全体です。オリジナルはここにあります: Ideablade PRISM ページ

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");
    //}

  }
}
4

1 に答える 1

0

の 2 つの対応するメソッドはCompositionContainerComposeExportedValue<T>(...)特定のインスタンスをコンテナーに追加できるようにするメソッドと、コンテナーから のGetExportedValue<T>(...)インスタンスを取得するメソッドですT

このようなサービス ロケーションの使用を減らし、コンストラクター インジェクションを優先するように型を設計できれば、コードの保守とテストがはるかに簡単になります。たとえば、コードを次のように変換できますか。

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

    }
}
于 2011-09-25T07:13:58.257 に答える