뷰에 등록해야하는 영역을 알 수 있도록 영역 이름을 모듈에 전달할 수 있습니까?방법 : 런타임에 뷰를 등록 할 영역을 모듈에 알리기
많은 코드 예제에서 regionName이 모듈 초기화 메소드에서 하드 코드되었음을 알 수 있습니다.
모듈에서 영역에 뷰를 등록 할 때 영역 이름에 SHELL을 전달하고 싶습니다.
이것이 가능하지 않거나 권장되지 않는 경우 왜 이것이 좋지 않거나 좋은 것입니까?
뷰에 등록해야하는 영역을 알 수 있도록 영역 이름을 모듈에 전달할 수 있습니까?방법 : 런타임에 뷰를 등록 할 영역을 모듈에 알리기
많은 코드 예제에서 regionName이 모듈 초기화 메소드에서 하드 코드되었음을 알 수 있습니다.
모듈에서 영역에 뷰를 등록 할 때 영역 이름에 SHELL을 전달하고 싶습니다.
이것이 가능하지 않거나 권장되지 않는 경우 왜 이것이 좋지 않거나 좋은 것입니까?
나, 그리고 다른 사람들은 어떻게 든 설정/통과되는 마법 문자열을 피하는 아이디어를 처리합니다. 문자열의 저장을 중앙 집중화하여 다른 장소에서 참조 할 수 있습니다.
먼저 문자열을 저장할 클래스가 필요합니다. 내 프리즘 ... 영역 ... 이름에 RegionNames
이라는 이름을 사용합니다. 아래 예가 있습니다. 이 모든 다른 어셈블리가 아래처럼 사용할 수 있습니다, 참조 할 수 어셈블리와 같은 솔루션의 중앙 위치에 설치하면
namespace Application.Shared
{
public class RegionNames
{
// Main window regions
public static string RibbonRegion { get { return "RibbonRegion"; } }
public static string TitleBarRegion { get { return "TitleBarRegion"; } }
public static string ToolBarRegion { get { return "ToolBarRegion"; } }
public static string DashboardRegion { get { return "DashboardRegion"; } }
public static string ContentRegion { get { return "ContentRegion"; } }
}
}
.
using Application.Shared;
namespace Application.Modules
{
public class ModuleX : IModule
{
private readonly IUnityContainer _container;
private readonly IRegionManager _region_manager;
public ModuleX (IUnityContainer container, IRegionManager region_manager)
{
_container = container;
_region_manager = region_manager;
}
public override void Initialize()
{
_region_manager.RegisterViewWithRegion(RegionNames.RibbonRegion, typeof(ToolViewX));
_region_manager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(FinderViewX));
}
}
}
는만큼 클래스가 RegionNames
클래스가 사용하는 네임 스페이스에 액세스 할 수 있습니다, 그들은 정적 속성에 액세스 할 수 있습니다. 이런 식으로 전달할 것이 없습니다.
이 기술은 Prism 또는 C#! 모든 프로그래밍 언어에서이 패턴을 사용할 수 있습니다. RegionNames
에 전화하는 대신 StringBag
이나 뭐든지 부르세요.
희망이 도움이됩니다.
감사합니다. 런타임 중에 다른 regionname을 원하면 어떻게해야합니까? 예를 들어, 동일한 모듈의 두 인스턴스를로드하려면 두 개의 서로 다른 지역 이름이 있어야합니다. – Arcadian
나는이 사람들이 올바른 생각을 가지고 있다고 생각한다. http://4-getful.blogspot.com/2010/04/ensuring-your-prism-modules-can-load.html – Arcadian
차이점에 대한보기를 표시하려면 지역에서 런타임에, 당신은 RequestNavigate를 통해 할 수 있습니다. http://prismlibrary.readthedocs.io/en/latest/WPF/08-Navigation/#view-based-navigation 컴파일시 돌로 설정하지 않아도됩니다. 거의 7 년 전 블로그 게시물을 실제로 인용 하시겠습니까? 그 나쁜 예입니다. –
가장 좋은 방법은 지역 이름을 관리하고이를 모듈에 주입하는 것입니다.
IRegionNameService
{
string MainRegion {get;}
string DetailRegion {get;}
}
은 컨테이너와 싱글로 서비스를 등록, 지금 당신은 모듈이로드 된 응용 프로그램 출시 및 전 때 당신이 그것을 원하는대로 구성 할 수 있습니다.
지금 EventService를 사용하여 종료되었습니다. 그러나 여전히 해결책에 만족하지 않습니다. – Arcadian
셸이 모든 영역 이름을 모듈에 "전달하지"않습니다. 쉘 *은 어떤 모듈이 뷰를 삽입 할 수있는 영역을 정의합니다. 당신이하려는 것을 이해하지 못하지만, 잘못된 접근법처럼 들립니다. – mm8
동일한 모듈 뷰의 인스턴스를 두 개 이상 동일한 쉘에로드하는 방법은 무엇입니까? 예를 들어, "Part Entry"모듈이 있고 사용자가 원하는만큼의 인스턴스를 허용하려는 경우. 각 인스턴스는 도킹 가능한 탭에로드됩니다. – Arcadian
과 유사합니다. http://4-getful.blogspot.com/2010/04/ensuring-your-prism-modules-can-load.html – Arcadian