2017-01-02 1 views
0

프리즘 유니티 (Prism Unity)를 사용하여 상태 코드와 같은 조회 테이블을로드하기위한 좋은 디자인에 대한 조언을 찾고 있습니까? 내 뷰 라이브러리는 도메인 중심으로되어 있으며 IUnityContainer에 전달되는 모듈이 있습니다. 초기화 섹션에서 IStateCode, StateCode와 같은 RegisterType 컨테이너에 등록합니다.프리즘/단일체를 사용하여 룩업 테이블을로드하는 가장 좋은시기는 언제입니까?

유형을 등록하고 상태 개체를로드 한 다음 RegisterInstance를 사용해야합니까? 각 도메인 (dll)에서이 작업을 수행해야합니까, 아니면 한 번만 중앙 집중식으로 테이블을로드해야합니까? 내가 mainwindow의로드에 조회 테이블을로드하는 방법에 대한 생각,하지만 그 모듈의 모든 조회 클래스를 참조해야합니다. 중앙 위치를 사용하여 조회 테이블을로드하는 경우 조회 테이블이 null이 될 염려가없고 한 영역에 있습니다. 예, 어떻게 말하는 거죠?

답변

1

이러한 종류의 작업으로 얻은 접근법은 솔루션에서 중심 프로젝트를 만드는 것입니다. Core.UI (또는 원하는대로)라고 할 수 있습니다. 거기서, 컨테이너에 싱글 톤으로 등록한 클래스를 생성합니다.이 클래스는 애플리케이션 시작시 필요한 데이터를로드합니다 (Initialize 호출을 통해 코드 참조). 이것은 일반적으로 서비스라고합니다.

데이터를 원하는대로 유연하게로드하면 만들 수 있습니다. 응용 프로그램로드 시간 또는 속성에 처음 액세스 할 때 나는 데이터가 거대하지 않기 때문에 나는 앞을 내다 보았다. 그리고 그것은 자주 바뀌지 않는다. 여기에도 일종의 캐싱 메커니즘을 고려할 수도 있습니다.

나는 제품과 비슷한 것을 만들었습니다. 아래는 미국 주 코드입니다.

public class StateListService : IStateListService // The interface to pass around 
{ 
    IServiceFactory _service_factory; 
    const string country = "United States"; 
    public StateListService(IServiceFactory service_factory) 
    { 
     _service_factory = service_factory; 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     // I am using WCF services for data 
     // Get my WCF client from service factory 
     var address_service = _service_factory.CreateClient<IAddressService>(); 
     using (address_service) 
     { 
      try 
      { 
       // Fetch the data I need 
       var prod_list = address_service.GetStateListByCountry(country); 
       StateList = prod_list; 
      } 
      catch 
      { 
       StateList = new List<AddressPostal>(); 
      } 
     } 
    } 

    // Access the data from this property when needed 
    public List<AddressPostal> StateList { get; private set; } 
} 

편집 :

는, 프리즘 6 싱글로 위를 등록 당신이 당신의 컨테이너를 초기화하는 데 사용하는 방법에 코드 줄을 추가합니다. 보통 부트 스트랩퍼에서.

RegisterTypeIfMissing(typeof(IStateListService), typeof(StateListService), true);

관련 문제