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; 
          };    
     } 

뷰 모델은 다음과 같습니다

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>()); 
} 

확실하지 :하지만이 지역에 대한 유형 및 뷰를 등록하려면 다음과 같은 방법으로 인터페이스의 초기화 방법을 사용하고,라고 한 및보기 유형. 개인적으로 컨테이너에서 유형을 확인하는 방법을 제어하는 ​​것을 선호합니다.

관련 문제