处理依赖注入 - 逻辑在哪里?

时间:2009-10-28 19:33:02

标签: asp.net unity-container

我正在开发一个ASP.Net网站,以及一个支持我的业务逻辑,数据访问代码等的类库。

我非常陌生,并且不熟悉整个Unity框架和依赖注入。但是,我已经设法通过遵循codeplex上的ASP.NET 3.5 Portal入门套件的源代码来实现它。但这就是问题所在:

使用Unity设置类库,我的几个类在其属性上具有[Dependency]属性(我只为此使用属性设置器注入)。但是,Global.asax告诉Unity如何在类库中处理注入....

这是最佳做法还是类库应该处理它自己的注入,以便我可以将库重新用于其他网站,webapps或应用程序?如果情况确实如此,那么注入代码将在何处进行?

我不确定这个问题有多清楚。如果我需要解释更多,请告诉我。

2 个答案:

答案 0 :(得分:1)

虽然不熟悉Unity(StructureMap用户)最终的映射应该存在于消费应用程序中。您可以使用您正在使用的dll定义这些映射,但您也希望能够在需要时覆盖它们。比如说你需要一个IFoo的实例,并且你有一个映射到你的类库中,但是你添加了一个新的用于生活在网站中的实例。在站点中定义映射允许您保持松散耦合,或者为什么使用DI容器?

答案 1 :(得分:1)

就个人而言,我尝试编写代码以便于IOC容器,但绝不会尝试将IOC容器强制插入到项目中。

我的解决方案细分大致如下: (其中每个都是项目)。

  • Project.Domain
  • Project.Persistence.Implementation
  • Project.Services.Implementation
  • Project.DIInjectionRegistration
  • Project.ASPNetMVCFrontEnd(我使用MVC,但没关系)。

我尝试对项目引用保持严格的界限。实际的前端项目不能直接包含任何* .Implementation项目。 (在这种情况下,* .implementation项目包含域中接口的实际实现)。所以ASPNetMVCFrontEnd引用了域和DIInjectionWhatever以及我的DI容器。

在Project.DIInjectionWhatever我将所有部分绑在一起。所以这个项目包含了对实现和DI框架的所有引用。它包含用于注册组件的代码。 Autofac让我可以轻松地分解组件注册,这就是我采用这种方法的原因。

在这里的示例中,我的实现项目中没有对容器的任何引用。它没有任何问题,如果您的实现需要它,那么继续。