À l'aide de Ninject, puis-je créer une instance à partir d'une interface sans exposer ma classe de béton?

Les échantillons que j'ai vu jusqu'à présent ressembler à ceci:

Écrire votre code comme celui-ci...

public class Samurai {
  public IWeapon Weapon { get; private set; }
  public Samurai(IWeapon weapon) {
    Weapon = weapon;
  }
}

Et Ninject pouvez mapper l'interface pour le béton de type comme ça...

public class WarriorModule : NinjectModule {
  public override void Load() {
    Bind<IWeapon>().To<Sword>();
  }
}

Donc, quand je dis var samurai = kernel.Get<Samurai>(); dans mon Samurai objet de mon IWeapon est automatiquement une Épée.

C'est cool, mais si je veux juste le ISword sans le Samouraï et le béton épée est marqué comme interne?

Actuellement, j'utilise un home made solveur de dépendances où je pourrais dire var sword = DependencyResolver.Current.Resolve<ISword>(); et il me donne dos une Épée jeté comme ISword. Mes classes concrètes sont marqués comme interne, de sorte que le développeur doit passer par mon solveur de dépendances pour créer une instance. Ne Ninject ont quelque chose de semblable à cela?

Et une question bonus, je décore mes Interfaces avec un custom "DefaultConcreteType" attribut qui ma résolution de dépendances pouvez utiliser si aucune correspondance n'existe. Ne Ninject avoir quelque chose comme ça?

Grâce

OriginalL'auteur adam0101 | 2011-03-15