Register decorator with another dependency of same generic type
Tag : chash , By : Denis Chaykovskiy
Date : March 29 2020, 07:55 AM
should help you out I had to do some investigation in the code base to see what was going one. You might call this a glitch in Simple Injector's implementation, but it's IMO a fair trade off. Simple Injector's decorator sub system is based around the idea of working with open generic types and open generic decorators. The check it does upon decorator registration is to see if a decorator's constructor has only one decoratee. This check is done using the open generic abstraction to which the decorator must be applied; in your case ICommandHandler . Since at that point only the generic ICommandHandler is available, two constructor parameters match this type. It is possible to improve these pre-condition checks, but this is actually quite nasty, while the usefulness of this feature is very limited. It's limited because it's only useful for non-generic decorators. Take a look at the following decorator for instance:public class GenericDecorator<TCommand> : ICommandHandler<TCommand> {
public GenericDecorator(
ICommandHandler<TCommand> decoratee,
ICommandHandler<LoggingCommand> dependency)
{
}
}
new DeadlockRetryCommandHandlerDecorator<MessageCommand>(
new TransactionCommandHandlerDecorator<MessageCommand>(
new MessageSender()))
new DeadlockRetryCommandHandlerDecorator<MessageCommand>(
new TransactionCommandHandlerDecorator<MessageCommand>(
new MessageLogger(
new MessageSender(),
new DeadlockRetryCommandHandlerDecorator<MessageLogger>(
new TransactionCommandHandlerDecorator<MessageLogger>(
new Logger())))))
public class MessageLogger : ICommandHandler<MessageCommand> {
private ICommandHandler<MessageCommand> innerHandler;
private ILogger logger;
public MessageLogger(
ICommandHandler<MessageCommand> innerHandler, ILogger logger) {
this.innerHandler = innerHandler;
this.logger = logger;
}
public void Execute(MessageCommand command) {
innerHandler.Execute(command);
logger.Log(command.Message);
}
}
public class LogCommandHandler : ICommandHandler<LogCommand> {
private ILogger logger;
public LogCommandHandler(ILogger logger) {
this.logger = logger;
}
public void Execute(LogCommand command) {
logger(string.Format("Message \"{0}\" sent at {1}",
command.LogMessage, DateTime.Now));
}
}
|
Unsatisfied dependency expressed through constructor argument with index 0 of type -> No qualifying bean of type
Tag : java , By : Vijayant Singh
Date : March 29 2020, 07:55 AM
I wish this helpful for you StudenciService in the constructor should be iStudenciService because you want to inject not the concrete implementation but the interface.
|
why the argument of a function are register type
Tag : c , By : Chandra P Singh
Date : March 29 2020, 07:55 AM
|
Why can I not register a custom JSON.Net implementation in Nancy?
Tag : chash , By : Ben Brown
Date : March 29 2020, 07:55 AM
|
How to register and resolve open generic with two type arguments as interface with one type argument using Autofac
Tag : chash , By : iyogee
Date : March 29 2020, 07:55 AM
|