我见过的几乎所有Ninject示例都解释了如何在ASP.NET MVC中使用它,它会自动将依赖项注入控制器.我如何手动使用Ninject?假设我有一个自定义ActionResult: public class JsonResult : ActionResult{ [Inj
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; } }
将此工厂注入控制器并使用它来创建操作结果.