Я пытаюсь украсить мои обработчики команд, используя замок windsor, но кажется, что мои регистрации неверны, поскольку класс не оформлен.Регистрация родовых декораторов в замке виндзора?
У меня есть следующие установки:
internal class CommandsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IDbConnection>()
.UsingFactoryMethod(() => ConnectionHelper.GetOpenDbConnection(Connection.DatabaseName.ReedOnline))
.LifestylePerWebRequest());
container.Register(
Classes
.FromAssemblyContaining<EcruiterCommands>()
.Where(t => t.Name.EndsWith("Commands"))
.WithService
.AllInterfaces().LifestylePerWebRequest());
container.Register(
Classes
.FromAssemblyContaining<EcruiterCommands>()
.Where(t => t.Name.EndsWith("CommandHandler"))
.WithService.AllInterfaces()
.LifestylePerWebRequest());
container.Register(Component.For(typeof (ICommandHandler<>))
.ImplementedBy(typeof (TransactionCommandHandlerDecorator<>))
.IsDefault()
.LifestylePerWebRequest());
container.Register(Component.For(typeof (ICommandHandler<>))
.ImplementedBy(typeof (ExceptionHandlingCommandHandlerDecorator<>))
.IsDefault()
.LifestylePerWebRequest());
}
}
и это мой декоратор:
namespace TempSearch.Ioc.Decorators.CommandHandlers
{
public class TransactionCommandHandlerDecorator<TCommand> : ICommandHandler<TCommand>
{
private readonly ICommandHandler<TCommand> decorated;
public TransactionCommandHandlerDecorator(ICommandHandler<TCommand> decorated)
{
this.decorated = decorated;
}
public void Handle(TCommand command)
{
using (var scope = new TransactionScope())
{
decorated.Handle(command);
scope.Complete();
}
}
}
}
Кроме того, я задаюсь вопросом, если мои декораторы должны жить в корне композиции или в сборке класса, который они украшают. Сейчас я переместил их в корень композиции, как Виндзорский замок пытаюсь зарегистрировать свои декораторы вместе с другими классами, и я получаю сообщение об ошибке:
Component TempSearch.Command.Data.Decorators.TransactionCommandHandlerDecorator`1 could not be registered.
There is already a component with that name.
Did you want to modify the existing component instead?
If not, make sure you specify a unique name.
«У меня есть трудности» «Какая это будет трудность? Также постарайтесь придерживаться одного вопроса за сообщение. –
@PatrickQuirk прав. Я попробовал ответить на ваш вопрос об декораторах, прежде чем начать редактирование. Пожалуйста, откат и откройте другой вопрос, а не – samy
. Я открыл еще один вопрос здесь: http://stackoverflow.com/questions/29627510/castle-windsor-instances-are-registered-as-singleton-even-though-explicitly-decl – Xerxes