2013-06-18 2 views
0

이 간단한 질문이지만, 어디에서든지 예제를 찾을 수는 없습니다. 이것을 초보자를 돕는 것으로 생각하십시오. 싱글 톤 클래스를 만들어야 여러 파일에 걸쳐 BitmapImages 사전에 액세스 할 수 있습니다.BitmapImages 사전이있는 싱글 톤 클래스의 예

사전은 다음과 같습니다

ConcurrentDictionary<string, BitmapImage> PlantImageDictionary; 

사람이 작성하는 방법의 예를 게시하시기 바랍니다 수 /이 인스턴스를? 누군가 그와 같은 사전이 어떻게 불릴지에 대한 예를 게시 할 수 있습니까?

미리 감사드립니다.

+2

그래서 싱글 톤 (anti) 패턴을 구현해야합니까 ?? 그것은 인터넷 (게으른, 자물쇠, 이중 자물쇠 ....)에서 죽음에 맞을 주제입니다. 아무리해도 구현을 선택하면 읽기 전용 사전을 반환해야합니다. – Vivek

+0

왜 읽기 전용 사전이 필요합니까? 나는 그것에 덧붙여 야한다. – zetar

+1

다른 스레드에서 수정하려고합니까? 'Dictionary '클래스는 스레드로부터 안전하지 않으므로 모든 액세스를 잠금으로 랩핑하거나 ['ConcurrentDictionary '] (http://msdn.microsoft.com/en-us/)를 사용해야합니다. library/dd287191.aspx)를 사용하십시오. –

답변

3

사전에서 읽으려면 ConcurrentDictionary이 필요하지 않습니다. 사실, 나는 Dictionary을 전혀 공개하지 않는 것이 좋습니다. 오히려 필요한 최소한의 메소드를 공개합니다. 당신이 원한다면 키로 무엇인가를 볼 수있는 능력이 있다면, 그 방법을 제공하십시오.

다음은 당신이 요구하는 것을 수행 할 매우 간단한 싱글 톤입니다.

public sealed class ImageCache 
{ 
    private static readonly Dictionary<string, Bitmap> Images; 

    static ImageCache() 
    { 
     Images = new Dictionary<string, Bitmap>(); 
     // load XML file here and add images to dictionary 
     // You'll want to get the name of the file from an application setting. 
    } 

    public static bool TryGetImage(string key, out Bitmap bmp) 
    { 
     return Images.TryGetValue(key, out bmp); 
    } 
} 

아마도 싱글 톤 패턴을 연구하고 대안을 조사해야 할 것입니다. 위의 조치가 해당 업무를 수행하는 반면 최상의 방법은 아닙니다. 예를 들어 눈에 띄는 문제 중 하나는 XML 파일의 위치에 대한 외부 지식이 필요하기 때문에 테스트 프레임 워크에 맞추는 것이 다소 어렵습니다. 더 나은 대안이 있지만 이것은 시작해야합니다.

+0

첫 번째로, 답장과 정보에 감사드립니다! 어쩌면 나는 잘못된 방향으로 갈 것입니다. 난 단지 같은 프로젝트에서 C# 파일 묶음에 걸쳐 비트 맵 이미지 사전에 액세스해야합니다. 또한 동일한 프로젝트에서 여러 C# 파일을 통해 큰 바이트 배열에 액세스해야합니다. 전 세계 속임수를 사용할 수 없습니다. 너는 무엇을 제안 하는가? – zetar

관련 문제