Примеры, которые я видел до сих пор, выглядят так:
Напишите свой код вот так ...
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 без Samurai и конкретный меч помечен как внутренний?
В настоящее время я использую самодельный преобразователь зависимостей, где я могу сказать var sword = DependencyResolver.Current.Resolve
, и он вернет мне Меч брошен как ISword. Мои конкретные классы помечены как внутренние, поэтому разработчик должен пройти через мой преобразователь зависимостей, чтобы создать экземпляр. Есть ли у Ninject что-нибудь подобное?
И бонусный вопрос, Я украшаю свои интерфейсы настраиваемым атрибутом «DefaultConcreteType», который мой преобразователь зависимостей может использовать, если сопоставления не существует. Есть ли у Ninject что-то подобное?
Спасибо