Подтвердить что ты не робот

С. Параметрами. Конструирование с использованием ninject 2.0

Как использовать эту функцию в ninject 2.0?

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

"С" не существует: (

4b9b3361

Ответ 1

   [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 );
   }

Ответ 2

Я не уверен, поддерживает ли Ninject (я сейчас вдалеке от моего компьютера разработки), но если все остальное терпит неудачу (документация Ninject оставляет желать лучшего), вы можете отделить инициализацию от конструктора, чтобы решить вашу проблему проблема:

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

Затем вы можете сделать это:

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

Это далеко не идеально, но в большинстве случаев должно выполнять эту работу.