首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在mvc3中不使用构造器模式从对象中获取资源

如何在mvc3中不使用构造器模式从对象中获取资源
EN

Stack Overflow用户
提问于 2011-10-23 15:37:41
回答 2查看 896关注 0票数 1

当在mvc3中使用Ninject时,我们会做一些类似的事情,比如安装ninject,注册器模块或服务。

我们像这样编写控件

代码语言:javascript
代码运行次数:0
运行
复制
public class HomeController : Controller
{
    private IHelloService _service;
    public HomeController(IHelloService service)
    {
        _service = service;
    }

    public string Index()
    {
        return _service.GetGreeting();
    }
}

我想做一些像这样的事情

代码语言:javascript
代码运行次数:0
运行
复制
public class HomeController : Controller
{
    private IHelloService _service;

    /*
          No default constructor
    */

    public string Index()
    {
        _service= Ask_Ninject_to_provide_resource
        return _service.GetGreeting();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-23 15:58:06

代码语言:javascript
代码运行次数:0
运行
复制
public class HomeController : Controller
{
    private IHelloService _service;

    /*
          No default constructor
    */

    public string Index()
    {
        _service= DependencyResolver.Current.GetService<IHelloService>();
        return _service.GetGreeting();
    }
}

尽管我会严肃地质疑这样做的必要性。

票数 5
EN

Stack Overflow用户

发布于 2011-10-23 16:00:50

您当前编写控件的实践比您提出的更好。您希望能够通过字段进行注入,而不是通过构造函数。这不是一个好主意,我们不推荐这样做。

引用自Ninject wiki

“尽管它的简单性很诱人,但您通常应该尽量避免使用字段注入,因为只能通过Ninject设置值。这使得单元测试变得更加复杂,因为有时手动使用依赖项注入将模拟对象注入到单元测试中是最容易的。(使用Ninject进行单元测试将在后面进行更深入的讨论。)”

另一种选择是通过属性注入,但同样,您必须有一个非常好的理由这样做。在大多数情况下,构造函数注入应该可以完成这项工作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7864953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档