在WebApi项目中,我有一个类SyncProductsHelper
。这个类有两个属性,一个构造函数和一些方法:Ninject动态构造函数参数
public class SyncProductsHelper
{
public int iId { get; set; }
public string sId { get; set; }
public SyncProductsHelper(int iId, string sId)
{
this.iId = iId;
this.sId = sId;;
}
public ind ChangeSomething(int a)
{
iId = a;
}
}
现在我试图启用DI在我的项目,所以我已经安装了Ninject和设置。我写的接口ISyncProductsHelper
:
public interface ISyncProductsHelper
{
void ChangeSomething(int a);
}
,做我的解析绑定:
_kernel.Bind<ISyncProductsHelper>().To<SyncProductsHelper>();
在我的控制器使用这个SyncProductsHelper,我建立一个构造函数和一个字段:
private readonly ISyncProductsHelper _syncHelper;
public SyncProductController(ISyncProductsHelper syncHelper)
{
this._syncHelper = syncHelper;
}
问题是,我不知道在哪里设置我当前实现ISyncProductsHelper所需的iId和sId参数。它们是由用户通过Post来动态提供给ApiController的,所以显然我不能使用WithConstructorArgument
,正如我在别处看到的那样。 参数对于这个类来说是必不可少的,但是我应该用setter方法来设置它们 - 或者做什么。
另见http://stackoverflow.com/questions/25667834/constructor-with-multiple-arguments-with-ninject/25700827#25700827 – BatteryBackupUnit 2014-09-26 13:49:29
有了'ApiController',你指的是'SyncProductController'?如果这些值在实例化时不知道,但只有在执行后才能知道,则不能使用ctor注射。你应该使用'.Initialize(...)'或者(取决于助手在做什么)方法来传递一个方法,使用'ChangeSomething'方法。 – BatteryBackupUnit 2014-09-26 13:52:04