Образцы, которые я видел до сих пор, выглядят следующим образом:
Напишите свой код следующим образом:
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
И Ninject может сопоставить интерфейс с конкретным типом, подобным этому...
public class WarriorModule : NinjectModule {
public override void Load() {
Bind<IWeapon>().To<Sword>();
}
}
Итак, когда я говорю var samurai = kernel.Get<Samurai>();
в моем объекте самурая, мой IWeapon автоматически является Мечом.
Это круто, но что, если я хочу, чтобы только ISword без самурая и конкретного меча был помечен как внутренний?
В настоящее время я использую домашний преобразователь зависимостей, где я мог бы сказать var sword = DependencyResolver.Current.Resolve<ISword>();
, и он возвращает мне бросок меча как ISword. Мои конкретные классы отмечены как внутренние, поэтому разработчик должен пройти через свой преобразователь зависимости, чтобы создать экземпляр. Есть ли у Ninject что-то подобное?
И вопрос бонуса, я украшаю свои интерфейсы специальным атрибутом DefaultConcreteType, который может использовать мой зависимый преобразователь, если отображение не существует. Есть ли у Ninject что-нибудь подобное?
Спасибо