我见过的几乎所有 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
将为空。但是,按照以下方式进行操作对我来说似乎不太正确:
public ActionResult Get(int id)
{
var someObject = repo.GetObject(id);
return IoC.Kernel.Get<JsonResult>(someObject);
}
因为现在控制器中不仅依赖于 Ninject,而且我还必须在静态类/单例中公开 Ninject 内核,并确保依赖注入的对象仅通过内核创建。
有没有办法以某种方式配置 Ninject 来注入依赖项而不依赖于暴露内核?我希望能够使用new
如果可能的话,使用关键字。
使用注入内核的工厂:例如
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;
}
}
将此工厂注入控制器并使用它来创建您的操作结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)