Разрешить одноэлементные обобщения, где T - это контроллер, реализующий интерфейс - PullRequest
0 голосов
/ 25 апреля 2020

У меня такая ситуация:

public class MyController : Controller, ILoggable
{
     private readonly ILogger<ILoggable> _logger;

     public MyController(ILogger<ILoggable> logger)
     {
         this._logger = logger;
     }
     ...
}

Я хочу разрешить ILogger<ILoggable> как синглтон и ILoggable как переходный процесс. В моем стартапе я попытался с этим:

services.AddSingleton(typeof(ILogger<>), typeof(LoggerImpl<>));

Но я не могу разрешить ILoggable, потому что это контроллер, и я не понимаю, какой подход лучше.

EDIT Вот проблема: я не могу объявить ILogger<MyController> внутри моего контроллера, потому что ILogger<ILoggable> используется в коде третьей части. Я пытаюсь лучше объяснить мою проблему без использования зависимости зависимостей.

У меня есть третий класс, в котором есть конструктор, подобный этому>

Public ExternalClass(ILogger<ILoggable> logger) {…}

Теперь в моем контроллере мне нужно использовать это внешний класс, но, очевидно, я не могу сделать что-то вроде этого:

public class MyController : Controller, ILoggable
{
     private readonly ILogger<MyController> _logger;

     public MyController(ILogger<MyController> logger)
     {
         this._logger = logger;
         ExternalClass c = new ExternalClass(logger); //Here the error because logger is of type ILogger<MyController>, not ILogger<ILoggable>
     }
     ...
}

Мне нужно решить это через DI.

Может кто-нибудь помочь мне, пожалуйста? Спасибо

...