我是Castle Windsor的新手,我想知道是否有人可以帮助我以通用方式注册以下组件,以便我的所有命令都能自动注册。还有如何添加装饰器。
编辑:以下似乎有效但我仍然坚持如何配置装饰器。
WindsorContainer container = new WindsorContainer();
container
.Register(
Classes.FromAssemblyInThisApplication()
.BasedOn(typeof(ICommand))
.LifestyleTransient());
public interface ICommand
{
}
public interface ICommandArgs
{
}
public interface ICommand<TArgs> : ICommand where TArgs : ICommandArgs
{
void Execute(TArgs args);
}
public class ChangePasswordArgs : ICommandArgs
{
public ChangePasswordArgs()
{
}
}
public class ChangePasswordCommand : ICommand<ChangePasswordArgs>
{
public void Execute(ChangePasswordArgs args)
{
Console.WriteLine("[CHANGING PASSWORD]");
}
}
public class TransactionCommand<TArgs> where TArgs : ICommandArgs
{
private readonly ICommand<TArgs> innerCommand;
public TransactionCommand(ICommand<TArgs> innerCommand)
{
this.innerCommand = innerCommand;
}
public void Execute(TArgs args)
{
this.innerCommand.Execute(args);
}
}
编辑:这是我目前所在的地方,但装饰者没有得到正确解决:
container.Register(
Component.For(typeof(ICommand<>))
.ImplementedBy(typeof(TransactionalCommand<>))
.LifestyleTransient(),
Classes.FromAssemblyInThisApplication()
.BasedOn(typeof(ICommand<>))
.WithService.AllInterfaces()
.LifestyleTransient()
);