Примеры, которые я видел до сих пор, выглядят так:
Напишите свой код следующим образом ...
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 есть что-нибудь подобное?
Спасибо