Простой инжектор: невозможно зарегистрировать обобщенные типы c в конструкторе при регистрации коллекции - PullRequest
0 голосов
/ 21 марта 2020

У меня есть список Funcs, который содержит типы и их аргументы, которые мне нужно зарегистрировать в контейнере:

var LogCreaters = new List<Func<ILogFormat, FolderLocation, ILogWriter>>
{
    (fmt,path)=> new NlogWriter(new NlogConfiguration(fmt,path.logging)),
    (fmt,path)=> new DisplayWriter(fmt)
}

Вот как я пытаюсь зарегистрировать коллекцию:

container.Collection.Register<ILogWriter>(LogCreaters);

Далее:

foreach (var item in LogCreater)
{
    container.Collection.Append<ILogWriter>(
        () => item(LogFormat, FolderLocation), LifeSpan.Scoped);
}

Но container.Verify() выдает следующее исключение:

Конфигурация недопустима. Не удалось создать экземпляр для типа Logger. Конструктор типа NlogWriter содержит параметр с именем 'config' и типом NlogConfiguration, но NlogConfiguration не зарегистрирован. Чтобы разрешить NlogConfiguration, он должен быть зарегистрирован в контейнере.

Я предполагаю, что тип NlogWriter зарегистрирован в контейнере, но его аргументы конструктора не регистрируются в обработать. Как я смогу зарегистрировать LogCreators вместе с их конструкторами и типами в аргументах конструктора контейнера в моем текущем сценарии.

Недавно я задал этот вопрос о том, как зарегистрировать коллекцию, в которой был дан ответ на мой вопрос, но я думаю, что не смог правильно объяснить свой текущий сценарий, поэтому я публикую это снова с более подробной информацией.

TIA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...