c# - injection - ninject getting started




With.Parameters.ConstructorArgument con ninject 2.0 (2)

Non sono sicuro che Ninject lo supporti (sono al momento lontano dal mio computer di sviluppo), ma se tutto il resto fallisce (la documentazione di Ninject lascia molto a desiderare) è possibile separare l'inizializzazione dal costruttore per risolvere il problema:

class MyType 
{
   public class MyType() {}
   public class MyType(string param1,string param2){Init(param1,param);}
   public void Init(string param1,param2){...}
}

Quindi puoi fare questo:

MyType obj = kernel.Get<MyType>();
obj.Init("foo","bar");

È tutt'altro che perfetto, ma dovrebbe fare il lavoro nella maggior parte dei casi.

Come usare questa funzionalità in novject 2.0?

MyType obj = kernel.Get<MyType>(With.Parameters.ConstructorArgument("foo","bar"));

Il "Con" non è lì :(


   [Fact]
   public void CtorArgTestResolveAtGet()
   {
       IKernel kernel = new StandardKernel();
       kernel.Bind<IWarrior>().To<Samurai>();
       var warrior = kernel
           .Get<IWarrior>( new ConstructorArgument( "weapon", new Sword() ) );
       Assert.IsType<Sword>( warrior.Weapon );
   }

   [Fact]
   public void CtorArgTestResolveAtBind()
   {
       IKernel kernel = new StandardKernel();
       kernel.Bind<IWarrior>().To<Samurai>()
           .WithConstructorArgument("weapon", new Sword() );
       var warrior = kernel.Get<IWarrior>();
       Assert.IsType<Sword>( warrior.Weapon );
   }




ninject