Могу ли я с помощью Ninject создать экземпляр из интерфейса, не раскрывая свой конкретный класс?

Примеры, которые я видел до сих пор, выглядят так:

Напишите свой код вот так ...

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 что-то подобное?

Спасибо

10
задан adam0101 15 March 2011 в 16:36
поделиться