Unity 5와 Prism 7에서 프로그램을 만들고 있습니다. 프로그램을 모듈 식으로 만들어서 일부 모듈을 사용할 수없는 경우 제대로 작동하게하고 싶습니다.Unity 프레임 워크가 OptionalDependency를 해결하지 못합니다.
이 경우 나는 [OptionalDependency]
속성으로 선택적 종속성을 표시하고 null
이 생성자에 전달되면 수행 할 작업을 스스로 결정하도록합니다.
그러나이 속성을 사용하여 종속성을 표시하면 Unity는 모듈을 사용할 수 있음에도 불구하고이를 해결하지 않고 종속성 인스턴스 대신 null
을 전달합니다.
내가 어떻게 의존성을 실제로 만들 수 있습니까? 가지고있어 좋은가?
또는 다른 옵션
는 어떻게 의존성를 해결할 수없는 경우에을 던져, 그냥 대신null
을 전달하고 구성하는 클래스가 무엇을해야할지 결정하지
에 통일을해야합니까? 내 프로그램의 App.xaml.cs
있다 : 나는 프리즘 + 유니티에서 멍청한 놈이기 때문에
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
InitializeModules();
this.ShutdownMode = ShutdownMode.OnMainWindowClose;
var shell = Container.Resolve<Shell>();
this.MainWindow = shell;
return shell;
}
protected override void RegisterTypes(IContainerRegistry containerRegistry) { }
/// <summary>
/// Creating catalog of Modules from .dlls in "Modules" folder
/// </summary>
protected override IModuleCatalog CreateModuleCatalog()
{
var catalog = new DirectoryModuleCatalog() { ModulePath = @"./Modules" };
catalog.Initialize();
// by the way, modules aren't getting recognized without
// catalog.Initialize() or InitializeModules in CreateShell.
// Should it be such as that? Seems to me like no..
return catalog;
}
}
주요 질문 옆에, 내가 질문 아래의 의견에 더 나은 내 코드를 만드는 방법에 대한 어떤 제안을 주셔서 감사합니다. 고맙습니다!
왜 OptionalDependency 속성을 매개 변수에 적용 할 수 있습니까? 생성자 매개 변수 옆에 매개 변수를 표시하는 다른 용도는 없습니다. 그리고 Prism 7.0.0.344-ci로 MyGet으로 옮겼고, CreateShell에서 InitializeModules();없이 쉘의 뷰 모델 생성자에 필요한 모듈 중 하나를 해결할 수 없기 때문에 여전히 동작하지 않습니다. – 1valdis
또한 IModule 및 모듈 기능 구현 자체가 엄격하게 다른 클래스에 있어야하므로 기능이 사용 된 컨테이너에 종속되지 않습니다. 그러나 속성 주입은 내 서비스가 IModule이거나 속성을 가져 오는 데 대한 참조가 있어야 함을 의미합니다. 내가 무엇을 선택해야하며 다른 방법이 있습니까? – 1valdis
Unity 팀에 속성 동작에 대해 물어봐야 할 것입니다. 당신이 재산으로 바꾼다면 그것은 깨졌습니까? 셸이 모듈보다 먼저 만들어집니다. 셸에서는 모듈 서비스를 요청할 수 없습니다. 셸에 종속성이있는 경우 모듈이 아닌 셸 프로젝트에 등록해야합니다. 다른 질문을 이해할 수 없습니다. 코드 냄새가 나처럼 들리는군요 (디자인에 문제가 있습니다). –