繁体   English   中英

Ninject注入模型asp.net MVC

[英]Ninject inject model asp.net MVC

我正在使用Ninject并想注入模型的属性。我有以下模型

public class TCFormModel
{
    public string Name { get; set; }
    public IPNConBut pConBut { get; set; }
}

我想注入IPNConButConBut一个实现类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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM