미디어 브라우저에는 공급자 모델이 있습니다. 이것은 기본적으로 각 엔터티에 대해 특정 순서로 호출되는 클래스 체인입니다. 공급자 체인에 주석을 달 수있는 가장 좋은 방법
그래서 예를 들어, 우리는이 : providers = new List<IMetadataProvider>();
providers.Add(new ImageFromMediaLocationProvider());
providers.Add(new ImageByNameProvider());
providers.Add(new MovieProviderFromXml());
providers.Add(new MovieDbProvider());
providers.Add(new TVProviderFromXmlFiles());
providers.Add(new TvDbProvider());
providers.Add(new VirtualFolderProvider());
providers.Add(new FrameGrabProvider());
providers.Add(new MediaInfoProvider());
목록에서 공급자의 순서는 중요한 고차 공급자가 낮은 순서의 것들보다 우선합니다.
최근에이 부분을 확장 가능하도록 만들려고했습니다. 따라서 제 3 자 DLL은 자체 체인을 주입 할 자체 공급자를 정의 할 수 있습니다.
문제는 제 3자가 체인에 직접 삽입하도록 허용하면이 순서를 정의하기위한 중앙 위치를 잃게된다는 것입니다.
현재 약간의 불편 함이있는 현재 솔루션은 각 공급자마다 선택적 우선 순위 특성을 정의한 다음 우선 순위에 따라 순서를 지정하는 것입니다.
그래서 예를 들어 지금이 :이 제 3 자 체인에서의 위치를 정의 할 수 있습니다[ProviderPriority(20)]
class ImageByNameProvider{}
.
내가 생각한 또 다른 해결책은 예를 들어 속성 예전과 후의 것입니다.
[Before(typeof(ImageByNameProvider))]
class ImageFromMediaLocationProvider {}
그러나이 프로그램이 더 쉽거나 어렵다고 확신 할 수 없습니다.
이 문제에 대한 다른 해결책이 있습니까? 어떤 해결책을 가지고 가겠습니까?
아마, 난 그냥 핵심 공급자에 대한 목록을 유지해야하고 ... 타사 공급자에 대한 attribs 후/전 실제로 해결해야 여기에 몇 가지 다른 문제가있는 것 같다
Scott, 시간과 사려 깊은 답변을 주셔서 감사합니다. 다음 날 또는 내 아이디어를 다룰 때 제 질문을 확장하려고합니다. 이것은 상당히 복잡한 문제입니다. +1 –