我希望听听您对在控制器级别和/或领域级别应用依赖注入的主要优点和缺点的看法。
让我解释一下。如果我收到一个IUserRepository作为我的User的参数,我可以采取两种方式:
1.我直接将IUserRepository注入到我的域对象中,然后在控制器级别使用User而不需要新建对象,这意味着我可以从DI容器中获取它们准备好的对象。
2.我在我的控制器(例如,Register.aspx.cs)上注入IUserRepository,并在那里使用来自DI容器的依赖项创建所有域对象。
昨天,当我和朋友交谈时,他告诉我,如果你从容器中获取域对象,则会失去其生命周期控制,因为容器会为您管理它,他认为这可能会在处理大型xml配置文件时出现错误。这个观点与我不同,因为您可以编写测试循环遍历程序集中的每个域对象,然后询问容器是否是单例、请求范围、会话范围还是应用程序范围。如果其中任何一个为真,则失败。这是确保此类问题不会发生的一种方法。
我更倾向于使用域方法(1),因为我在控制器级别看到了大量重复代码的节省(当然,在XML文件中会有更多的行)。
我朋友提出的另一点是,想象一下,由于某种原因,你被迫从DI容器A更改为B,并且假设B不支持构造函数注入(这是一个“无缝容器”Java的情况,它通过设置器注入来操作BC或仅执行其任务),那么他的观点是,如果我将所有代码放在控制器级别,我可以顺畅地重构我的代码,因为我可以访问像Auto-Refactoring和Auto-Complete这样的工具,而在处理XML文件时则不可用。
我现在陷入了困境,因为我应该立即做出决定。
哪种方法应该利用我的架构?还有其他的思考方式吗?
您认为这是否是一个相关的问题,我应该担心吗?
让我解释一下。如果我收到一个IUserRepository作为我的User的参数,我可以采取两种方式:
1.我直接将IUserRepository注入到我的域对象中,然后在控制器级别使用User而不需要新建对象,这意味着我可以从DI容器中获取它们准备好的对象。
2.我在我的控制器(例如,Register.aspx.cs)上注入IUserRepository,并在那里使用来自DI容器的依赖项创建所有域对象。
昨天,当我和朋友交谈时,他告诉我,如果你从容器中获取域对象,则会失去其生命周期控制,因为容器会为您管理它,他认为这可能会在处理大型xml配置文件时出现错误。这个观点与我不同,因为您可以编写测试循环遍历程序集中的每个域对象,然后询问容器是否是单例、请求范围、会话范围还是应用程序范围。如果其中任何一个为真,则失败。这是确保此类问题不会发生的一种方法。
我更倾向于使用域方法(1),因为我在控制器级别看到了大量重复代码的节省(当然,在XML文件中会有更多的行)。
我朋友提出的另一点是,想象一下,由于某种原因,你被迫从DI容器A更改为B,并且假设B不支持构造函数注入(这是一个“无缝容器”Java的情况,它通过设置器注入来操作BC或仅执行其任务),那么他的观点是,如果我将所有代码放在控制器级别,我可以顺畅地重构我的代码,因为我可以访问像Auto-Refactoring和Auto-Complete这样的工具,而在处理XML文件时则不可用。
我现在陷入了困境,因为我应该立即做出决定。
哪种方法应该利用我的架构?还有其他的思考方式吗?
您认为这是否是一个相关的问题,我应该担心吗?