[英]Ninject inject model asp.net MVC
我正在使用Ninject并想注入模型的属性。我有以下模型
public class TCFormModel
{
public string Name { get; set; }
public IPNConBut pConBut { get; set; }
}
我想注入IPNConBut
我ConBut
一个实现类IPNConBut
。
public class ConBut : IPNConBut { ... }
我怎样才能做到这一点?
稍后编辑-更多信息:
我的模型用在活页夹中,尝试创建TCFormModel实例时失败。 这是有道理的,但是如何避免呢? 我尝试了两个构造函数,一个构造函数无参数,另一个构造函数具有绑定参数。 我还在属性甚至构造函数上尝试了[Inject],结果也相同。 从未使用过构造函数。
public class TCFormModelBinder : IModelBinder
{
private const string sessionKey = "TCFM_Model";
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
TCFormModel model = null;
if (controllerContext.HttpContext.Session != null)
{
model = (TCFormModel)controllerContext.HttpContext.Session[sessionKey];
}
if (model == null)
{
model = new TCFormModel();
if (controllerContext.HttpContext.Session != null)
{
controllerContext.HttpContext.Session[sessionKey] = model;
}
}
return model;
}
}
工厂界面:
public interface IPNConButFactory
{
IPNConBut Create();
}
您可以使用构造函数注入:
public class TCFormModel
{
public TCFormModle(IPNConBut pConBut) {
this.pConBut = pConBut;
}
public string Name { get; set; }
public IPNConBut pConBut { get; set; }
}
(通常建议)或属性注入:
public class TCFormModel
{
public string Name { get; set; }
[Inject]
public IPNConBut pConBut { get; set; }
}
另请参阅: https : //github.com/ninject/ninject/wiki/Injection-Patterns
通常是Wiki: https : //github.com/ninject/ninject/wiki
更新:
我建议使用https://github.com/ninject/ninject.extensions.factory扩展名。
如下绑定工厂界面:
IBindingRoot.Bind<IPNConButFactory>().ToFactory();
然后,在TCFormModelBinder
注入IPNConButFactory
并使用它创建一个实例。 在构造函数注入的情况下,模型仅需要一个构造函数,在属性注入的情况下,则不需要(默认值ctor)。
我对asp.net MVC不熟悉,所以我不确定您是否可以实际将某些东西注入TCFormModelBinder
但我猜想是这样。 无论如何,无论如何,您都需要以某种方式访问IKernel
并从那里检索工厂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.