С помощью SimpleInjector вы можете зарегистрировать коллекцию типов:
interface ILogger { }
class FileLogger : ILogger { }
class SqlLogger : ILogger { }
// usage
var container = new Container();
container.Collection.Register<ILogger>(typeof(FileLogger), typeof(SqlLogger));
container.GetAllInstances<ILogger>(); // returns both ILoggers
Имея это в виду, я хочу обернуть такие ILogger
s абстракцией MyLogger
, которые я могу использовать в своем приложении:
interface MyLogger {
}
class LoggerAdapter : MyLogger {
public LoggerAdapter(ILogger logger) { }
}
Однако я не могу заставить контейнер зарегистрировать адаптер регистратора как коллекцию поверх зарегистрированной коллекции ILogger
s:
var container = new Container();
container.Collection.Register<ILogger>(typeof(FileLogger), typeof(SqlLogger));
container.Collection.Register<MyLogger>(typeof(ILogger));
// ArgumentException: The supplied type ILogger does not inherit from MyLogger.
// Parameter name: serviceTypes
Хотя сообщение об исключении ясно (ILogger
не наследуется от LoggerAdapter
), я чувствую, что SimpleInjector должен иметь возможность сделать LoggerAdapter
s из ILogger
s, просто введя эти ILogger
s в LoggerAdapter
s.
Есть ли чистый способ зарегистрировать коллекцию таких адаптеров?