Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.Parameters.ConstructorArgument和ninject 2.0_C#_Ninject - Fatal编程技术网

C# 使用.Parameters.ConstructorArgument和ninject 2.0

C# 使用.Parameters.ConstructorArgument和ninject 2.0,c#,ninject,C#,Ninject,如何在ninject 2.0中使用此功能 MyType obj = kernel.Get<MyType>(With.Parameters.ConstructorArgument("foo","bar")); MyType obj=kernel.Get(带有.Parameters.ConstructorArgument(“foo”、“bar”); “With”不存在:(我不确定Ninject是否支持它(我目前不在开发计算机上),但如果所有其他操作都失败(Ninject文档还有很多需

如何在ninject 2.0中使用此功能

MyType obj = kernel.Get<MyType>(With.Parameters.ConstructorArgument("foo","bar"));
MyType obj=kernel.Get(带有.Parameters.ConstructorArgument(“foo”、“bar”);

“With”不存在:(

我不确定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");
MyType obj=kernel.Get();
对象初始(“foo”、“bar”);
它远非十全十美,但在大多数情况下都应该能完成这项工作。

[事实]
   [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 );
   }
public void CtorArgTestResolveAtGet() { IKernel kernel=新的标准内核(); kernel.Bind().To(); var=内核 .Get(新的构造器参数(“武器”,新的剑()); Assert.IsType(战士.武器); } [事实] public void CtorArgTestResolveAtBind() { IKernel kernel=新的标准内核(); kernel.Bind()到() .使用构造器论证(“武器”,新剑()); var warrior=kernel.Get(); Assert.IsType(战士.武器); }
谢谢您的回答,但不幸的是,如果没有此参数,我无法调用对象的构造函数…Ninject 1.x做得很好,我想知道此功能在2.0版本中是如何更改的。我可以使用ResolveAtGet将参数传递给对象图中的对象吗?Get方法调用仅将参数传递给正在解析的顶级项。除此之外,如果要将参数传递给链中更深的对象,则必须在绑定中执行该操作。@Zach(和Ian,但他知道这一点!)底层WithConstructorArgument/ConstructorArgumentn-ctor上有一个重载,它允许将参数标记为继承的,这会导致它们像我认为的那样传播到子分辨率中。(一般来说,这是错误的方法,会造成混乱,但肯定存在)