加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – 如何在控制器IoC框架不可知的情况下将Ninject

发布时间:2020-12-16 09:14:49 所属栏目:asp.Net 来源:网络整理
导读:我见过的几乎所有Ninject示例都解释了如何在ASP.NET MVC中使用它,它会自动将依赖项注入控制器.我如何手动使用Ninject?假设我有一个自定义ActionResult: public class JsonResult : ActionResult{ [Inject] public ISerializer Serializer { get; set; } pu
我见过的几乎所有Ninject示例都解释了如何在ASP.NET MVC中使用它,它会自动将依赖项注入控制器.我如何手动使用Ninject?假设我有一个自定义ActionResult:

public class JsonResult : ActionResult
{
    [Inject] public ISerializer Serializer { get; set; }

    public JsonResult(object objectToSerialize)
    {
        // do something here
    }

    // more code that uses Serializer
}

然后在我的控制器中,我在这样的方法中使用JsonResult:

public ActionResult Get(int id)
{
    var someObject = repo.GetObject(id);
    return new JsonResult(someObject);
}

正如你所看到的,我自己实例化了这个对象,它回避了Ninject的注入,而Serializer将为null.但是,以下方式执行此操作对我来说似乎不太合适:

public ActionResult Get(int id)
{
    var someObject = repo.GetObject(id);
    return IoC.Kernel.Get<JsonResult>(someObject);
}

因为现在控制器中不仅存在对Ninject的依赖,而且还必须在静态类/单例中公开Ninject内核,并确保依赖注入的对象仅通过内核创建.

有没有办法以某种方式配置Ninject注入依赖,而不依赖于暴露内核?如果可能的话,我希望能够使用新的关键字.

解决方法

使用注入内核的工厂:例如

public class ResultFactory : IResultFactory
{
    public ResultFactory(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public JsonResult CreateJsonResult(object obj)
    {
        var result = this.kernel.Get<JsonResult>();
        result.ObjectToSerialize = obj;
        return result;
    }
}

将此工厂注入控制器并使用它来创建操作结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读