Jesteśmy w trakcie przeprojektowywania niektórych starszych programów, aby były bardziej testowalne i zdecydowały się na Dependency-Injection i Castle.Windsor, aby nam pomóc.Wiele wzorów dekoratorów w zamku-windsor
Po pierwsze, nasz cel: * Liczba dekoratorów, które działają w strumieniu danych. * Możliwe są różne kombinacje dekoratorów, a węzły główne w każdym przypadku mogą być wymagane do uzyskania danych z różnych miejsc.
Technicznie, nasz projekt jest następujący:
interface IUpdateableValue<T>
{
T Get();
};
Mamy na przykład trzy zestawy danych, które należy pobrać z szeregu komponentów, wszystkie wdrożenia IUpdateableValue() (Pseudo-kod):
JsonParser(
Decompressor(
Decrypter(decryptionKey
FileCache(filename,
HttpWebDownloader(url))))
XmlParser(
Decompressor(
Decrypter(decryptionKey2
FileCache(filename2,
HttpWebDownloader(url2))))
Mam problemy wychodzi projekt, aby pasowały do DI-ram jak zamek Windsor . Podejrzewam, że niektóre z nich mogą być obsługiwane przez nazwane instancje, ale wydaje się to śmierdzące dla tego użycia.
Chodzi o to, że "użytkownik" np. instancje JsonParser i XmlParser nie wiedzą (lub nie obchodzą), czy dane pochodzą z HttpUrl, pliku czy magicznie wyciągniętego z czapki.
Myślę, że coś jest nie tak z naszym projektem, ale nie wiemy, jak to naprawić.
Wszelkie pomysły na temat postępu?
Są tu pytania dotyczące pracy z generycznymi dekoratorami w Windsor na stronie SO (na przykład [this one] (http://stackoverflow.com/questions/9888019)), ale nie pamiętam, aby ktoś na nie odpowiedział, więc Spodziewam się, że trudno to zrobić z Windsor. Inne pojemniki, takie jak Autofac lub Simple Injector, mogą przynieść więcej sukcesów. Być może [ta strona wiki dotycząca rejestrowania generycznych dekoratorów] (http://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Generic_Decorators) w Simple Injector może dać ci kilka pomysłów na temat projektowania twojego systemu. – Steven
Dlaczego używałbyś do tego zamku? Jakie korzyści zapewni to? –