Мы находимся в процессе редизайна некоторых устаревших программ, чтобы сделать их более тестируемыми, и решили использовать 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, такую как Castle-Windsor. Я подозреваю, что некоторые из них могут быть обработаны именованными экземплярами, но это кажется вонючим для этого использования.
Идея состоит в том, что «пользователь», например, экземпляры JsonParser и XmlParser не знают (или не заботятся), поступают ли данные из HttpUrl, файла или волшебным образом извлечены из шляпы.
Я думаю, что в нашем дизайне что-то не так, но не знаю, как это исправить.
Есть идеи, как развиваться дальше?