레퍼런스 데이터 서비스 레이어를 정적 구현으로 변경하려고 시도하고 싱글 톤 패턴을 적용하려고합니다. 이유는, 나는 레퍼런스 서비스가 성능 향상을 위해 정적 일 수 있다고 생각한다. (모두 같은 '인스턴스'를 공유한다 - 제 생각에는?)싱글 톤, 스태틱 및 IoC
나는 계층화 된 애플리케이션을 가지고있다. UI-> 서비스 -> 논리 -> 데이터
그러나 IoC를 사용하며 충돌이 있다고 생각합니다. Unity를 IoC 컨테이너로 사용합니다. 정적 인스턴스와 인스턴스를 처리하는 공용 인스턴스를 추가하여 변환을 시작합니다.
그러나 내 생성자와 무엇을해야할지 모르겠습니다. I (유니티)는 현재
public class ReferenceDataService : IReferenceDataService
{
private static ReferenceDataService instance;
IReferenceDataLogic _refDataLogic;
ObjectCache cache = MemoryCache.Default;
public ReferenceDataService(IReferenceDataLogic logic)
{
_refDataLogic = logic;
}
public static ReferenceDataService Instance {
get
{
if(instance != null) return instance;
lock(new object())
{
instance = new ReferenceDataService();
}
result instance;
}
}
}
... 생성자에 내 참조 데이터 로직 클래스를 주입하지만 그건 내 UI 코드에서, 나는 데이터를 얻을 수 있지만, 말을 할 수 있도록 내가,이 생성자를 제거 할 필요가 있다고 생각 :
var MyReferenceDataList = ReferenceDataService.Instance.GetMyReferenceDataList(type);
로직 및 데이터 액세스 레이어 클래스도 정적으로 만들어야합니까? 그 말은 내가 이것을 실제로 테스트 할 수는 없다는 것을 의미한다.
이 중 하나를 수행해야합니까? 당신은 원래의 구현을 사용할 수없고 단결로 단일 인스턴스를 생성 할 수 있습니까? – Fran
잘 모르겠습니다. @ 프랑 - 그 부분을 살펴 보겠습니다. – Craig
당신이 나를 여기에서 교육 한 것처럼 보입니다. 내 Unity 컨테이너에서 간단히 이렇게 할 수 있습니다 : myContainer.RegisterType (new ContainerControlledLifetimeManager()); - 그 수업은 싱글 톤으로 취급 될 것입니다. 서비스 계층 클래스, 논리 및 데이터베이스 클래스를 변경해야한다고 생각합니까? –
Craig