Предположим, у меня есть интерфейс для извлечения данных и его реализация:
interface IResourceProvider
{
string Get( Uri uri );
}
class HttpResourceProvider : IResourceProvider
{
public string Get( Uri uri )
{
// Download via HTTP.
}
}
Я могу зарегистрировать это в замке Виндзор следующим образом:
container.Register
( Component.For<IResourceProvider>().ImplementedBy<HttpResourceProvider>()
);
(что нормально).
Если бы я тогда решил, что мне нужна реализация кэширования следующим образом:
class CachingResourceProvider : IResourceProvider
{
public CachingResourceProvider( IResourceProvider resourceProvider )
{
_resourceProvider = resourceProvider;
}
public string Get( Uri uri )
{
// Return from cache if it exists.
// Otherwise use _resourceProvider and add to cache.
}
private readonly IResourceProvider _resourceProvider;
}
Как мне зарегистрировать эти вложенные зависимости? то есть я хочу сказать, что IResourceProvider
реализован с помощью CachingResourceProvider
, кроме случаев, когда в конструкторе это HttpResourceProvider
.