如何在asp.net-mvc-2控制器中,IoC框架未知时,巧妙融合Ninject与各种ActionResults?
- 内容介绍
- 文章标签
- 相关推荐
本文共计454个文字,预计阅读时间需要2分钟。
在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; } }
将此工厂注入控制器并使用它来创建操作结果.
本文共计454个文字,预计阅读时间需要2分钟。
在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; } }
将此工厂注入控制器并使用它来创建操作结果.

