메뉴에 ms 리본 컨트롤을 사용하는 WPF Windows 응용 프로그램이 있습니다. 인프라 프로젝트에서 모든 모듈에서 참조 할 공유 서비스를 원합니다. 각 모듈은 해당 서비스를 사용하여 모듈에 대해 표시 할 메뉴 항목을 정의합니다.프리즘 v4, MEF 서비스
나는이 Prism+MEF: delayed a service export from prism-module을 읽었지만 다른 모듈이 서비스를 인식 할 수는 없습니다.
서비스
namespace Infrastructure
{
[ModuleExport("InfModule", typeof(InfModule), InitializationMode = InitializationMode.WhenAvailable)]
[PartCreationPolicy(CreationPolicy.Shared)]
public class InfModule : IModule
{
[Export(typeof(IMenuService))]
public IMenuService MenuService { get; private set; }
public void Initialize()
{
MenuService = new MenuService();
MenuService.AddItem("test");
}
}
}
나는 그것의 수입 이후 거짓 출력 디버그 라인 중 하나 기대했을 것이다
namespace Classic
{
[ModuleExport("Classic", typeof(Classic), InitializationMode = InitializationMode.WhenAvailable)]
[ModuleDependency("InfModule")]
public class Classic : IModule
{
private IRegionManager _regionManager;
[Import(typeof(IMenuService))]
private IMenuService menuService { get; set; }
[ImportingConstructor]
public Classic(IRegionManager regionManager)
{
this._regionManager = regionManager;
// This shows as true
Debug.WriteLine(menuService == null);
}
public void Initialize()
{
_regionManager.RegisterViewWithRegion("RibbonRegion", typeof(Views.RibbonTabMenu));
// This shows as true
Debug.WriteLine(menuService == null);
}
}
}
모듈. 어떤 생각이 내가 놓친거야?
감사합니다. getter에서 MenuService를 초기화하고 모듈의 ImportingConstructor에 인수로 IMenuService를 추가했습니다. ModuleDependency 행을 주석 처리했으며 여전히 작동합니다 ... 이유는 확실하지 않습니다. –
@Chris Klepis : 모듈 초기화 순서가 원하는 곳으로 떨어지기 때문입니다. ModuleDependency를 추가하면 주문을 원하는 위치에 놓을 수 있습니다. 의존성이 정말로있는 경우 나중에 종속성을 추가하여 나중에 문제가 없는지 확인해야합니다. –