Я новичок в замке Виндзор, поэтому я не уверен, что лучше всего подойдет в следующих случаях:
У меня есть сервисный интерфейс (ILoader), который реализован несколькими классами Loader. У меня также есть реализация ILoader, это декоратор:
public interface ILoader { }
public class LoaderImpl0 : ILoader { }
public class LoaderImpl1 : ILoader { }
public class CachedLoader : ILoader
{
public CachedLoader(ILoader inner) { }
}
Для каждого класса LoaderImpl ... я хочу зарегистрировать CachedLoader в своем контейнере, который украшает экземпляр LoaderImpl ....
Вот моя первая попытка мусора:
container.Register
(
Component.For<LoaderImpl0>().Named("loader0"),
Component.For<LoaderImpl1>().Named("loader1"),
Component
.For<ILoader>( )
.ImplementedBy<CachedLoader>( )
.ServiceOverrides( ServiceOverride.ForKey( "inner" ).Eq( "loader0" ) )
.Named("cachedLoader0"),
Component
.For<ILoader>()
.ImplementedBy<CachedLoader>()
.ServiceOverrides(ServiceOverride.ForKey("inner").Eq("loader1"))
.Named("cachedLoader1")
);
Это только кажется неправильным, на 2 счета:
container.ResolveAll<ILoader>()
возвращает все 4 зарегистрированных загрузчика (хотя я не зарегистрировал классы LoaderImpl ... с помощью службы ILoader).
- Кажется, что это очень неуклюжий способ определить, что является очень распространенным вложенным отношением - меня не волнуют классы LoaderImpl ..., они должны быть анонимными.
Может кто-нибудь просветить меня, где я иду не так?