Hy guys,
I have a problem, I have an interface like this:
public interface ICommand<in TRequest, out TResponse>
where TRequest : class
where TResponse : BaseResponse
{
TResponse Execute(TRequest request);
}
then I two class that implements this interface like this:
public class ExternalAddUser : ICommand<ExternalAddUserRequest, ExternalAddUserResponse>
{
private readonly ICommand<AddUserRequest, AddUserResponse> _command;
public ExternalAddUser(ICommand<AddUserRequest, AddUserResponse> command)
{
_command = command;
}
public ExternalAddUserResponse Execute(ExternalAddUserRequest request)
{
var response = _command.Execute(Mapper.Map<AddUserRequest>(request));
return Mapper.Map<ExternalAddUserResponse>(response);
}
}
and this:
public class AddUser : ICommand<AddUserRequest, AddUserResponse>
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMessageService _messageService;
private readonly IDefaultSettings _settings;
private readonly IMessageFactory _messageFactory;
public AddUser(IUnitOfWork unitOfWork, IMessageService messageService, IDefaultSettings settings, IMessageFactory messageFactory)
{
_unitOfWork = unitOfWork;
_messageService = messageService;
_settings = settings;
_messageFactory = messageFactory;
}
public AddUserResponse Execute(AddUserRequest request)
{
// My implementation here
}
}
The Interface IMessageFactory is a "Factory/Template" Pattern that creates an IMessage interface with only property like: Body, Subject, Language. I have registered my class with simple injector like this:
container.Register(typeof(ICommand<,>), businessLayerAssembly);
container.Register<IDefaultSettings, DefaultSettings>(Lifestyle.Singleton);
container.Register<ISecuritySettings, SecuritySettings>(Lifestyle.Singleton);
container.RegisterConditional<IMessageFactory, ActivationMessageFactory>
(c => c.Consumer.ImplementationType == typeof(AddUser)
|| c.Consumer.ImplementationType == typeof(SendActivationEmail));
container.RegisterConditional<IMessageFactory, RecoveryMessageFactory>
(c => !c.Handled);
Now I have another class that is Decorator of ActivationMessageFactory like this:
public class ActivationMessageWithoutLinkFactory : IMessageFactory
{
private readonly IMessageFactory _messageFactory;
public ActivationMessageWithoutLinkFactory(IMessageFactory messageFactory)
{
_messageFactory = messageFactory;
}
public IMessage CreateMessage(MessageData messageData)
{
// Implementation
}
}
My question is:
Is possible to inject ActivationMessageWithoutLinkFactory decorator in AddUser class when this class is called from ExternalAddUser class? Smell code example:
public class ExternalAddUser : ICommand<ExternalAddUserRequest, ExternalAddUserResponse>
{
public ExternalAddUserResponse Execute(ExternalAddUserRequest request)
{
ICommand<AddUserRequest, AddUserResponse> command = new AddUser(new SqlUnitOfWork(), new EmailService(),
new DefaultSettings(), new ActivationMessageWithoutLinkFactory(new ActivationMessageFactory()));
}
}
Thank you for you answer, I hope i was clear.
Aucun commentaire:
Enregistrer un commentaire