Я последовал совету Рубена и опубликовал небольшое сообщение в блоге о том, как этого добиться, но вот быстрый ответ:
Создание пользовательского атрибута:
public class InjectHereAttribute : Attribute
{
}
Целевой класс теперь будет выглядеть следующим образом:
public class Samurai
{
[InjectHere]
public IWeapon Context { get; set; }
}
Теперь необходимо настроить Ninject для использования пользовательского атрибута, это можно сделать, создав реализацию IInjectionHeuristic, которая распознает пользовательский атрибут:
public class CustomInjectionHeuristic : NinjectComponent, IInjectionHeuristic, INinjectComponent, IDisposable
{
public new bool ShouldInject(MemberInfo member)
{
return member.IsDefined(
typeof(InjectHereAttribute),
true);
}
}
И, наконец, добавьте это поведение в ядро Ninject, используя коллекцию Components, оно будет выполняться вдоль существующих компонентов, а именно реализации по умолчанию IInjectionHeuristic, что означает, что можно использовать атрибут по умолчанию или пользовательский атрибут.
// Add custom inject heuristic
kernel.Components.Add<IInjectionHeuristic, CustomInjectionHeuristic>();