Las muestras que he visto hasta ahora el siguiente aspecto:Usando Ninject, ¿puedo crear una instancia desde una interfaz sin exponer mi clase concreta?
escribir el código como éste ...
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
Y Ninject puede asignar la interfaz para el tipo concreto así ...
public class WarriorModule : NinjectModule {
public override void Load() {
Bind<IWeapon>().To<Sword>();
}
}
Así que cuando digo var samurai = kernel.Get<Samurai>();
en mi objeto Samurai mi IWeapon es automáticamente una espada.
Eso está bien, pero ¿y si solo quiero la espada ISword sin el samurai y la espada de hormigón está marcada como interna?
Actualmente, utilizo un resolutor de dependencias caseras donde podría decir var sword = DependencyResolver.Current.Resolve<ISword>();
y me devuelve un molde de espada como ISword. Mis clases concretas están marcadas como internas, por lo que el desarrollador debe pasar por mi resolución de dependencias para crear una instancia. ¿Ninject tiene algo similar a esto?
Y una pregunta extra, decorar mis interfaces con un atributo personalizado "DefaultConcreteType" que mi resolutor de dependencias puede usar si no existe una asignación. ¿Ninject tiene algo así tampoco?
Gracias