У меня есть два интерфейса ILogger
и ILogger<T>
, последний наследует от прежнего. И некоторый класс Handler
нравится:Autofac, используя общие объекты как не общие параметры
public class Handler
{
public Handler(ILogger logger)
{
}
}
, и я хотел бы сказать Autofac
разрешить и передать в ILogger<T>
вместо ILogger
. Предположим, я могу разрешить экземпляры как ILogger
, так и ILogger<T>
, так что это не проблема.
Я знаю, что я мог бы передать экземпляр, выполнив:
builder.RegisterType<Handler>()
.AsSelf() // assume any other suplerfluos config is also done
.WithParameter(...);
Там 3 перегрузках (по крайней мере, на моей версии Autofac
), но все 3 из них так или иначе подразумевают, используя экземпляр в качестве параметра.
Я хотел бы сделать что-то вроде: .WithParameter(typeOf(ILogger<Handler>))
Есть ли способ сделать это?
Как вы ожидаете, что это будет работать во время выполнения? Вы, конечно, не могли написать что-то подобное, что бы скомпилировать так, почему вы ожидаете, что среда выполнения будет вести себя по-другому? –
Если бы я вручную создавал экземпляр «Handler», я мог бы сделать «var handler = new Handler (новый DefaultLogger());» и это сработает. Я думал, что есть способ сделать Autofac делать это для меня всякий раз, когда я прошу обработчика. –
Luiso
Почему вы не просто сопоставляете 'ILogger' с' DefaultLogger() '? Или это будет 'DefaultLogger ()' для 'ILogger', который нужно ввести в' Handler2'? –