Я хочу передать экземпляр кэша в качестве зависимости от одного или нескольких типов. Когда конкретный экземпляр кэша создается, ему должна быть предоставлена информация о типе, который будет использовать его.Контент активирован Ninject 3
Я понимаю, что это общая задача и что зависимости от впрыскивания кеша появляются в различных вопросах/ответах; Я задаю конкретную проблему, с которой я сталкиваюсь с Ninject.
interface IMethodCache { }
public class MethodCache : IMethodCache
{
public MethodCache(Type type)
{
// type information is used to build unique cache keys
}
}
public class CacheConsumer
{
public CacheConsumer(IMethodCache cache) { }
}
документация
Ninject documentation shows how to do just that (с помощью регистрации в качестве примера):
class ClassThatLogs {
readonly ILog _log;
public ClassThatLogs(ILog log){
_log = log;
}
}
Bind<ILog>().ToMethod(context => LogFactory.CreateLog(context.Request.Target.Type));
В предыдущем примере показано, что context.Request.Target.Type
будет содержать информацию о типе для типа, в котором имеет место инъекции.
Кроме того, комментарии по context.Request.Target
состояние:
Получает цель, которая будет получать инъекции, если таковые имеются.
Результаты
Исходя из этого, я ожидаю увидеть информацию о экземпляре принимающем инъекции. Я устанавливаю свою привязку следующим образом:
kernel.Bind<IMethodCache>().ToMethod(
ctx =>
{
return new MethodCache(ctx.Request.Target.Type);
});
Но результат является неожиданным.
Type
свойство Target
устанавливается к типу привязки (IMethodCache
), а не "цель, которая будет получать инъекции" (CacheConsumer
).
Чтобы указать его другим способом: при создании зависимостей мне нужно передать ему тип инъекции.
Я могу получить нужную информацию с помощью context.Request.Target.Member.DeclaringType
. Тем не менее, я обеспокоен тем, что я не знаю последствий использования объявляющего типа и — более важно —, потому что это противоречит документации.
Вопросы
- Am Я понимание документации правильно?
- Если да, то что я делаю неправильно?
- Если нет, то как я могу достичь цели передачи информации о типе в конструктор моей зависимости (кеш)?
Другие детали
- Ninject 3.0.1.10
- Состав корень является началом событие службы Windows,
- Я использую
StandardKernel