Мы в процессе перепрофилирования некоторых устаревших программ, чтобы быть более проверяемыми, и решили использовать Dependency-Injection и Castle.Windsor, чтобы помочь нам.
Во-первых, наша цель: * Несколько декораторов, которые все работают на потоке данных. * Возможны несколько комбинаций декораторов, и корневые узлы в каждом случае могут потребоваться для получения данных из разных мест.
Технически наш дизайн выглядит следующим образом:
interface IUpdateableValue<T>
{
T Get();
};
У нас есть, например, три набора данных, которые нужно получить с помощью нескольких компонентов, все реализующие IUpdateableValue() (псевдокод):
JsonParser(
Decompressor(
Decrypter(decryptionKey
FileCache(filename,
HttpWebDownloader(url))))
XmlParser(
Decompressor(
Decrypter(decryptionKey2
FileCache(filename2,
HttpWebDownloader(url2))))
У меня возникли проблемы с дизайном, чтобы вписаться в DI-framework, например Castle-Windsor. Я подозреваю, что некоторые из них могут обрабатываться именованными экземплярами, но это кажется вонючим для этого использования.
Идея состоит в том, что "пользователь", например, экземпляры JsonParser и XmlParser не знают (или не заботятся) о том, поступают ли данные из HttpUrl, файла или магически вытаскиваются из шляпы.
Я думаю, что в нашем дизайне что-то не так, но не знаете, как это исправить.
Любые идеи о том, как продвигаться вперед?