如何从ninject中获取资源而不使用构造函数模式在mvc3

本文关键字:构造函数 模式 mvc3 ninject 资源 获取 | 更新日期: 2023-09-27 18:12:01

在mvc3中使用Ninject时,我们会这样做:安装Ninject,注册模块或服务

我们这样写control

public class HomeController : Controller
{
    private IHelloService _service;
    public HomeController(IHelloService service)
    {
        _service = service;
    }
    public string Index()
    {
        return _service.GetGreeting();
    }
}

我想写

public class HomeController : Controller
{
    private IHelloService _service;
    /*
          No default constructor
    */
    public string Index()
    {
        _service= Ask_Ninject_to_provide_resource
        return _service.GetGreeting();
    }
}

如何从ninject中获取资源而不使用构造函数模式在mvc3

您当前编写控件的实践比您建议的要好。您希望能够通过字段注入,而不是通过构造函数。这是一个坏主意,不建议这么做。

引用自Ninject wiki:

"虽然它的简单性很诱人,但通常应该尽量避免使用字段注入,因为只有通过Ninject才能设置该值。这使得单元测试更加复杂,因为有时手工使用依赖注入将模拟对象注入单元测试中是最简单的方法。(稍后将更深入地介绍使用Ninject进行单元测试。)"

另一种方法是通过属性注入,但同样,您必须有很好的理由这样做。大多数情况下,构造函数注入应该完成这项工作。

public class HomeController : Controller
{
    private IHelloService _service;
    /*
          No default constructor
    */
    public string Index()
    {
        _service= DependencyResolver.Current.GetService<IHelloService>();
        return _service.GetGreeting();
    }
}

虽然我会严重质疑这样做的必要性。