Я новичок в Castle Windsor, и мне было интересно, может ли кто-нибудь помочь мне зарегистрировать следующие компоненты в общем виде, чтобы все мои команды автоматически регистрировались. А также как добавить декоратора.Как авто-регистрация (по соглашению) generic decorator в Castle Windsor
EDIT: Следующее, похоже, работает, но я зациклился на том, как настроить декоратор.
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);
}
}
EDIT: Это где я в настоящее время, но декоратор не решается правильно:
container.Register(
Component.For(typeof(ICommand<>))
.ImplementedBy(typeof(TransactionalCommand<>))
.LifestyleTransient(),
Classes.FromAssemblyInThisApplication()
.BasedOn(typeof(ICommand<>))
.WithService.AllInterfaces()
.LifestyleTransient()
);
Что вы пробовали? Вы читали http://mikehadlow.blogspot.in/2010/01/10-advanced-windsor-tricks-4-how-to.html? –
Да, я сделал, но он не охватывает автоматическую регистрацию – Marco