Я пытаюсь сделать условное связывание с тем, действительно ли я внутри именованной области.Ninject NamedScope Условные привязки
Мой интерфейс ILogger - используя поведение по умолчанию для расширения Ninject Logger, мы вносим в каждый класс реализаторы регистратора конкретных типов. Однако, в одной части системы, мы хотим, чтобы экземпляр регистратор сферы ширины, который генерируется и утилизирован с временем жизни NamedScope ...
В настоящее время (в основном) мы имеем это:
Bind<IEventViewModel>().To<EventViewModel>().DefinesNamedScope("Event").Named("Event");
Bind<IEventChild>().To<EventChild>().InNamedScope("Event");
Bind<Ninject.Extensions.Logging.ILogger>().To<EventWideLogger>().WhenAnyAnchestorNamed("Event").InEventScope();
Однако то, что я действительно хочу это:
Bind<IEventViewModel>().To<EventViewModel>().DefinesNamedScope("Event");
Bind<IEventChild>().To<EventChild>().InNamedScope("Event");
Bind<Ninject.Extensions.Logging.ILogger>().To<EventWideLogger>().WhenInNamedScope("Event").InEventScope();
Как это позволило бы изменения объекта определения области видимости событий и сохранить такое же поведение.
Я попытался это, но безрезультатно:
public static class WhenEx
{
public static IBindingInNamedWithOrOnSyntax<T> WhenInNamedScoped<T>(this IBindingWhenSyntax<T> binding, string scopeName)
{
return binding.When(req => req.IsInNamedScope(scopeName));
}
public static bool IsInNamedScope(this IRequest req, string scopeName)
{
if (req.ParentContext != null && req.ParentContext.Parameters.OfType<NamedScopeParameter>().SingleOrDefault(parameter => parameter.Name == scopeName) != null)
return true;
return req.ParentRequest != null && req.ParentRequest.IsInNamedScope(scopeName);
}
}
Я не» почему это не должно работать. Можете ли вы опубликовать информацию об активации ActivationException? –
Совершенно верно - по какой-то неизвестной причине моя первоначальная попытка не сработала. Когда я снова попытался, он, похоже, работал по своему желанию. Спасибо! – jamespconnor