自定义控制器工厂如何与依赖注入相关?

艾门·卡瑞姆(Aymen Kareem)

我正在阅读本文:http : //www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be作者说我们需要创建一个自定义控制器工厂,因为默认控制器工厂不允许在无法实现依赖注入的控制器类中使用无参构造函数。但是,我相信我们可以创建一个不带参数的空构造函数,而另一个可以接受参数的构造函数,这样可以避免创建自定义控制器工厂的麻烦,如下图所示。

例如下面的代码:

public class HomeController : Controller
{
    private readonly ILogger _logger;
    public HomeController()
    {
    } 
    public HomeController(ILogger logger)
    {
        _logger = logger;
    }
}    

我可以在HomeController类中以及当实例化HomeController类时使ILogger变量公开:

HomeController controller = new HomeController(); 

我放:

controller.logger = whatevervalue

就像我使用时一样:

HomeController controller = new HomeController(whatevervalue); 

我相信以上内容可以实现依赖注入。

那么,为什么在上述情况下需要自定义控制器工厂?

约翰·H

作者说,我们需要创建一个自定义的控制器工厂,因为默认的控制器工厂不允许在无法实现依赖注入的控制器类中使用无参构造函数。

我认为您可能误解了本文的这一部分。问题不在于您不能指定自己的构造函数,该构造函数需要任意数量的参数,而是默认控制器工厂只会调用控制器的默认构造函数因此,很明显,使用您的示例:

public class HomeController : Controller
{
    private readonly ILogger _logger;
    public HomeController()
    {
    } 
    public HomeController(ILogger logger)
    {
        _logger = logger;
    }
}

当实例化的实例时HomeController,默认控制器工厂将始终调用此构造函数:

public HomeController()

不是这个:

public HomeController(ILogger logger)

这意味着ILogger实例将始终为null

所以现在的问题是,为什么默认控制器工厂只调用默认构造函数?我们可以通过问另一个问题来回答:默认控制器工厂如何知道您要调用哪个构造函数?如果您说“嗯,它可以调用参数最多的那个”,那么如果添加第三个构造函数,将会发生什么:

public HomeController(IService service)

HomeController现在有三个单独的构造函数,其中两个需要相同数量的参数。在这一点上,默认控制器工厂不具备正确调用您想要的构造函数所需的信息-它只能猜测。

因此,必须实现自己的控制器工厂的原因是使您有机会组合控制器所需的依赖项,以便随后可以为控制器自己调用正确的构造函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaFX自定义控制器工厂

来自分类Dev

如何在果园设置自定义控制器工厂?

来自分类Dev

kibana:如何使用自定义可视化插件注入控制器功能

来自分类Dev

如何使用依赖注入和工厂模式实现 ViewController 自定义初始化?

来自分类Dev

如何在SAP UI中的控制器中定义自定义控制器?

来自分类Dev

实现涉及多个程序集的自定义控制器工厂

来自分类Dev

使用fx:include时的自定义控制器工厂

来自分类Dev

监视工厂对象在自定义指令的控制器中不起作用

来自分类Dev

实现涉及多个程序集的自定义控制器工厂

来自分类Dev

如何从角度控制器调用自定义指令

来自分类Dev

自定义控制器动作

来自分类Dev

如何自定义fbfrienpickerview控制器并在自定义表视图中显示

来自分类Dev

如何将工厂注入控制器

来自分类Dev

打字稿:在控制器中注入自定义服务

来自分类Dev

AngularJS:自定义过滤器并注入控制器

来自分类Dev

Laravel自定义错误,模型已注入控制器

来自分类Dev

在控制器angularJS中注入工厂

来自分类Dev

我如何知道可以注入控制器的依赖项?

来自分类Dev

如何在控制器测试中注入依赖项?

来自分类Dev

如何在指令控制器中注入依赖项

来自分类Dev

EVE-定义自定义烧瓶控制器

来自分类Dev

控制器方法上的自定义验证器

来自分类Dev

如何重用在Storyboard控制器中定义为原型单元的自定义UITableViewCell

来自分类Dev

Spring MockMVC-如何模拟在控制器外部运行的自定义验证器

来自分类Dev

Angular - 控制器中的自定义验证器功能:如何访问“this”?

来自分类Dev

无法将其他视图控制器与Xcode 6中的自定义可可触摸类相关联

来自分类Dev

如何在Rails 4中添加要设计的自定义字段并自定义注册控制器?

来自分类Dev

如何将自定义对象从自定义身份验证提供程序传递到控制器?

来自分类Dev

Silex控制器依赖注入

Related 相关文章

  1. 1

    JavaFX自定义控制器工厂

  2. 2

    如何在果园设置自定义控制器工厂?

  3. 3

    kibana:如何使用自定义可视化插件注入控制器功能

  4. 4

    如何使用依赖注入和工厂模式实现 ViewController 自定义初始化?

  5. 5

    如何在SAP UI中的控制器中定义自定义控制器?

  6. 6

    实现涉及多个程序集的自定义控制器工厂

  7. 7

    使用fx:include时的自定义控制器工厂

  8. 8

    监视工厂对象在自定义指令的控制器中不起作用

  9. 9

    实现涉及多个程序集的自定义控制器工厂

  10. 10

    如何从角度控制器调用自定义指令

  11. 11

    自定义控制器动作

  12. 12

    如何自定义fbfrienpickerview控制器并在自定义表视图中显示

  13. 13

    如何将工厂注入控制器

  14. 14

    打字稿:在控制器中注入自定义服务

  15. 15

    AngularJS:自定义过滤器并注入控制器

  16. 16

    Laravel自定义错误,模型已注入控制器

  17. 17

    在控制器angularJS中注入工厂

  18. 18

    我如何知道可以注入控制器的依赖项?

  19. 19

    如何在控制器测试中注入依赖项?

  20. 20

    如何在指令控制器中注入依赖项

  21. 21

    EVE-定义自定义烧瓶控制器

  22. 22

    控制器方法上的自定义验证器

  23. 23

    如何重用在Storyboard控制器中定义为原型单元的自定义UITableViewCell

  24. 24

    Spring MockMVC-如何模拟在控制器外部运行的自定义验证器

  25. 25

    Angular - 控制器中的自定义验证器功能:如何访问“this”?

  26. 26

    无法将其他视图控制器与Xcode 6中的自定义可可触摸类相关联

  27. 27

    如何在Rails 4中添加要设计的自定义字段并自定义注册控制器?

  28. 28

    如何将自定义对象从自定义身份验证提供程序传递到控制器?

  29. 29

    Silex控制器依赖注入

热门标签

归档