2
我正在使用Castle Windsor 2.5(升級目前不是選項),並且正在嘗試在原始組件註冊後註冊裝飾器。看來,在城堡版本3中,您可以使用IsDefault來實現此目的。在城堡2.5中是否有類似的操作或者其他方式來實現?在Castle Windsor 2.5中設置默認實現(對於裝飾者)
要清楚,我不能更改註冊順序,以便裝飾者首先註冊。這是一種平臺架構,其中可以通過添加或更改現有註冊來修改客戶的默認平臺行爲。
我正在使用Castle Windsor 2.5(升級目前不是選項),並且正在嘗試在原始組件註冊後註冊裝飾器。看來,在城堡版本3中,您可以使用IsDefault來實現此目的。在城堡2.5中是否有類似的操作或者其他方式來實現?在Castle Windsor 2.5中設置默認實現(對於裝飾者)
要清楚,我不能更改註冊順序,以便裝飾者首先註冊。這是一種平臺架構,其中可以通過添加或更改現有註冊來修改客戶的默認平臺行爲。
貌似IHandlerSelector的伎倆:
public class DecoratorHandler : IHandlerSelector
{
private readonly IWindsorContainer _container;
private readonly HashSet<Type> _decoratedTypes = new HashSet<Type>();
public DecoratorHandler(IWindsorContainer container)
{
_container = container;
}
public bool HasOpinionAbout(string key, Type service)
{
return _decoratedTypes.Contains(service);
}
public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
{
return handlers[handlers.Length - 1];
}
public void Register<TTarget, TDecorator>() where TDecorator : TTarget, IDecorator<TTarget>
{
_container.Register(Component.For<TTarget>().ImplementedBy<TDecorator>());
_decoratedTypes.Add(typeof(TTarget));
}
}
而且
_decoratorHandler = new DecoratorHandler(_container);
_container.Kernel.AddHandlerSelector(_decoratorHandler);