如何在asp.net-mvc-2控制器中,IoC框架未知时,巧妙融合Ninject与各种ActionResults?

2026-03-30 12:071阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计454个文字,预计阅读时间需要2分钟。

如何在asp.net-mvc-2控制器中,IoC框架未知时,巧妙融合Ninject与各种ActionResults?

在ASP.NET MVC中,Ninject是一个流行的依赖注入框架。以下是对您提供的开头内容的简化版:

我看过几乎所有Ninject的示例,都展示了如何在ASP.NET MVC中使用它来自动注入依赖项控制器。那么,如何手动使用Ninject呢?假设我有一个自定义的`JsonResult`类:`public class JsonResult : ActionResult {...}`。

请注意,这段内容已经简化和去掉了不必要的字符,并且没有超过100个字。

我见过的几乎所有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; } }

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

如何在asp.net-mvc-2控制器中,IoC框架未知时,巧妙融合Ninject与各种ActionResults?

本文共计454个文字,预计阅读时间需要2分钟。

如何在asp.net-mvc-2控制器中,IoC框架未知时,巧妙融合Ninject与各种ActionResults?

在ASP.NET MVC中,Ninject是一个流行的依赖注入框架。以下是对您提供的开头内容的简化版:

我看过几乎所有Ninject的示例,都展示了如何在ASP.NET MVC中使用它来自动注入依赖项控制器。那么,如何手动使用Ninject呢?假设我有一个自定义的`JsonResult`类:`public class JsonResult : ActionResult {...}`。

请注意,这段内容已经简化和去掉了不必要的字符,并且没有超过100个字。

我见过的几乎所有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; } }

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

如何在asp.net-mvc-2控制器中,IoC框架未知时,巧妙融合Ninject与各种ActionResults?