У меня есть некоторые контроллеры mvc, которые должны создавать экземпляр одного регистратора в соответствии с полным именем контроллера.
Я пытаюсь объяснить на примерах. У меня есть этот интерфейс логгера:
public interface Ilogger { ... }
и его реализация
public class MyLogger
{
public MyLogger(loggerName)
{
...
}
...
}
Что ж, теперь мне нужны разные регистраторы на контроллеры.
namespace Controllers
{
public class MyFirstController
{
public MyFristController(Ilogger logger) { ... }
...
}
}
namespace Controllers
{
public class MySecondoController
{
public MySecondoController(Ilogger logger) { ... }
...
}
}
Мне нужны два разных синглтона ... По одному на контроллер, где параметр конструктора loggerName
из MyLoggerClass
должен изменяться в соответствии с контроллером. Итак, мне нужны два экземпляра:
new MyLogger("Controllers.MyFirstController")
а также
new MyLogger("Controllers.MySecondoController")
Я пробую что-то вроде этого:
builder.RegisterControllers(assemblies)
.PropertiesAutowired()
.WithConstructorParameter(typeof(ILoggerProvider));
Где WithConstructorParameter
- метод расширения:
public static IRegistrationBuilder<TLimit, TReflectionActivatorData, TStyle> WithConstructorParameter<TLimit, TReflectionActivatorData, TStyle>(this IRegistrationBuilder<TLimit, TReflectionActivatorData, TStyle> registration, Type targetType)
where TReflectionActivatorData : ReflectionActivatorData
{
return registration.WithParameter(
(pi, ctx) => pi.ParameterType == targetType,
(pi, ctx) => ...)); // <-- I have been losing here....
}
Это правильный подход? Как я могу решить свою проблему?
Спасибо
(pi, ctx) => ctx.ResolveNamed(pi.Member.DeclaringType.FullName, targetType)
- person Ciccio   schedule 01.05.2020