0

私はPRISM 4を使用していて、ほぼすべての機能について頭を抱えていますが、自分のDomainContextクラス(RIA)をビューモデルに挿入するとすぐに、 :)経験豊富なUnity/Prismの開発者が、どのように進めるべきかアドバイスを与えることができれば素晴らしいことでしょう。私のブートストラップ内Unity:RIA DomainContextを解決する際の問題

は、私はこのようなユニティコンテナに必要なクラスを登録しています:

protected override void ConfigureContainer() 
     { 
      base.ConfigureContainer(); 
      Container.RegisterType<SCMDomainContext>(); 
     } 

NavigationModuleの中で、私は特定の領域とNavigationViewを登録するのctorに次のように持っています。私はこのctorのをコメントアウトし、専用の空のctorのを置くとすぐに

public NavigationViewModel(SCMDomainContext context) 
     { 
      _context = context; 
      ConstructCommon(); 
     } 

を:

public NavigationView(NavigationViewModel viewModel) 
     { 
      InitializeComponent(); 

      Loaded += (s, e) => 
          { 
           DataContext = viewModel; 
          };    
     } 

のViewModelには、次があります。

public NavigationModule(IUnityContainer container, IRegionManager regionManager) 
     { 
      _container = container; 
      _regionManager = regionManager; 

      _regionManager.RegisterViewWithRegion(Constants.NavRegion,() => _container.Resolve<NavigationView>()); 

     } 

ビューは、依存関係としてビューモデルを取ります、それはすべて問題なく、私はSCMDomainContextクラスを解決できません。 Ria Servicesが提供するドメインコンテキストを作成するために追加するものはどれですか。

私はSilverlightを使用しているので、スタックトレースが例外に従うのを見ることができません。ページ上にこのメッセージが表示されます。私は何を逃していますか?この上のあなたの助けが高く評価されて

Microsoft JScript runtime error: Unhandled Error in Silverlight Application An exception occurred while initializing module 'NavigationModule'. 
    - The exception message was: Activation error occured while trying to get instance of type NavigationModule, key '' 
    Check the InnerException property of the exception for more information. If the exception occurred 
    while creating an object in a DI container, you can exception.GetRootException() to help locate the 
    root cause of the problem. at Microsoft.Practices.Prism.Modularity.ModuleInitializer.HandleModuleInitializationError(ModuleInfo moduleInfo, String assemblyName, Exception exception) 
    at Microsoft.Practices.Prism.Modularity.ModuleInitializer.Initialize(ModuleInfo moduleInfo) 
    at Microsoft.Practices.Prism.Modularity.ModuleManager.LoadModulesThatAreReadyForLoad() 
    at Microsoft.Practices.Prism.Modularity.ModuleManager.IModuleTypeLoader_LoadModuleCompleted(Object sender, LoadModuleCompletedEventArgs e) 
    at Microsoft.Practices.Prism.Modularity.XapModuleTypeLoader.RaiseLoadModuleCompleted(LoadModuleCompletedEventArgs e) 
    at Microsoft.Practices.Prism.Modularity.XapModuleTypeLoader.HandleModuleDownloaded(DownloadCompletedEventArgs e) 
    at Microsoft.Practices.Prism.Modularity.XapModuleTypeLoader.IFileDownloader_DownloadCompleted(Object sender, DownloadCompletedEventArgs e) 
    at Microsoft.Practices.Prism.Modularity.FileDownloader.WebClient_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e) 
    at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e) 
    at System.Net.WebClient.OpenReadOperationCompleted(Object arg) 

、 KAVE

答えて

0

実際、このようなDomainContextのレイヤーを作成するのに最適です。その後、簡単にIoCによって解決することができます:

public class ContactModuleService : IContactModuleService 
    { 
     readonly SCMDomainContext _context = new SCMDomainContext(); 

     #region Implementation of IContactModuleService 

     public EntitySet<Contact> Contacts 
     { 
      get { return _context.Contacts; } 
     } 

     public EntityQuery<Contact> GetContactsQuery() 
     { 
      return _context.GetContactsQuery(); 
     } 

     public SubmitOperation SubmitChanges(Action<SubmitOperation> callback, object userState) 
     { 
      return _context.SubmitChanges(callback, userState); 
     } 

     public SubmitOperation SubmitChanges() 
     { 
      return _context.SubmitChanges(); 
     } 

     public LoadOperation<TEntity> Load<TEntity>(EntityQuery<TEntity> query, Action<LoadOperation<TEntity>> callback, object userState) where TEntity : Entity 
     { 
      return _context.Load(query, callback, userState); 
     } 

     public LoadOperation<TEntity> Load<TEntity>(EntityQuery<TEntity> query) where TEntity : Entity 
     { 
      return _context.Load(query); 
     } 

     #endregion 
    } 
0

私はここにずっと間違って見ることができません。あなたが明示的にビューモデルを登録していない場合、それは違いを作るかどうか

#region properties 
[Dependency] 
public IUnityContainer Container { get; set; } 

[Dependency] 
public IRegionManager RegionManager { get; set; } 
#endregion 

public virtual void Initialize() 
{ 
    this.Container.RegisterType<NavigationViewModel>(new ContainerControlledLifetimeManager()); 
    this.Container.RegisterType<NavigationView>(new ContainerControlledLifetimeManager()); 

    this.RegionManager.RegisterViewWithRegion(Constants.NavRegion,() => this.Container.Resolve<NavigationView>()); 
} 

わからない:しかし、私は地域のためのタイプとビューを登録するには、次のようにインターフェースから、Initializeメソッドを使用している、と述べましたビューの種類を指定します。個人的には、コンテナによって型がどのように解決されるかを制御する方が好きです。

関連する問題