2010-06-19 118 views
2

我在我的Asp.Net MVC2项目中实现了Unity。我目前正在使用Application Start注册我的BLL类型。使用统一解耦数据访问层的业务逻辑层

然后我创建了一个名为UnityControllerFactory的类,它负责解析我的控制器中的依赖关系。我只是使用属性注入来完成这个通过使用依赖属性。

我的下一个想法是删除我的BLL类中包含的与DAL图层类的具体实现有关的依赖项。我也希望能够通过属性注入而不是构造器注入来做到这一点,因为我在我的Bll类方法中引用了多个类。

我希望得到一些解决方案的指导,解决这个确切的问题或完全矫枉过正?

回答

2

如果您的BLL类是由Unity创建的,那么它不会是一个问题,容器只会在创建时提供BLL类所需的依赖关系。如果它们不是,那么你将遇到一个问题,只是因为一般来说,创建BLL类的对象也应该提供依赖关系。

不过,我想告诉你使用基于属性的注入。在依赖注入领域的一般经验法则是要求依赖关系应通过构造函数注入,而可选依赖关系应通过属性注入。如果你的类需要另一个类来完成它的工作,那么在没有它所需的依赖关系的情况下,也不应该有任何方法来创建这个类的实例。

您提到使用属性注入,因为BLL类中依赖关系的数量。虽然我明白这一点,但我认为遵守required =构造函数规则仍然至关重要。如果您最终得到的依赖关系太多的构造函数,那么这是一种代码异味,指向您设计中的某个问题。这可能是因为这个班承担了太多的责任(如果你发现某些方法需要一组依赖性,而另一组需要不同组),则通常情况就是这样。也可能是因为依赖关系所做的工作太细化,可能会被包装在可以协调相关类的工作的另一个对象中。

+0

我相信它是后者,我可能已经使我的业务逻辑层类太细。我将着手重构业务逻辑层类以封装一些相关的业务实体功能。问题是我的领域模型很大,还有很多不相关的对象。 我仍然好奇,如果有任何好的文章,有一些指导如何创建一个容器,通过应用程序的不同层使用? – JustinMichaels 2010-06-19 06:26:09

+0

经过您的建议,将我的业务逻辑层类重构为分组功能。我已经简化了我的依赖关系,并为我的每个Controllers和BLL类实现了一个构造函数,这些类具有由Unity注入的依赖关系。我非常感谢帮助和指导。 – JustinMichaels 2010-06-19 12:52:32

+0

我很高兴能够提供帮助,特别是如果它帮助您达成更简单的解决方案。 – ckramer 2010-06-19 14:43:34