35

如何在 ninject 2.0 中使用此功能?

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

“与”不存在:(

4

2 回答 2

66
   [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 );
   }
于 2009-09-03T20:24:29.800 回答
1

我不确定 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");

它远非完美,但在大多数情况下应该可以完成这项工作。

于 2009-09-03T15:32:04.810 回答