我正在开发一个ASP.Net网站,以及一个支持我的业务逻辑,数据访问代码等的类库。
我非常陌生,并且不熟悉整个Unity框架和依赖注入。但是,我已经设法通过遵循codeplex上的ASP.NET 3.5 Portal入门套件的源代码来实现它。但这就是问题所在:
使用Unity设置类库,我的几个类在其属性上具有[Dependency]属性(我只为此使用属性设置器注入)。但是,Global.asax告诉Unity如何在类库中处理注入....
这是最佳做法还是类库应该处理它自己的注入,以便我可以将库重新用于其他网站,webapps或应用程序?如果情况确实如此,那么注入代码将在何处进行?
我不确定这个问题有多清楚。如果我需要解释更多,请告诉我。
答案 0 :(得分:1)
虽然不熟悉Unity(StructureMap用户)最终的映射应该存在于消费应用程序中。您可以使用您正在使用的dll定义这些映射,但您也希望能够在需要时覆盖它们。比如说你需要一个IFoo的实例,并且你有一个映射到你的类库中,但是你添加了一个新的用于生活在网站中的实例。在站点中定义映射允许您保持松散耦合,或者为什么使用DI容器?
答案 1 :(得分:1)
就个人而言,我尝试编写代码以便于IOC容器,但绝不会尝试将IOC容器强制插入到项目中。
我的解决方案细分大致如下: (其中每个都是项目)。
我尝试对项目引用保持严格的界限。实际的前端项目不能直接包含任何* .Implementation项目。 (在这种情况下,* .implementation项目包含域中接口的实际实现)。所以ASPNetMVCFrontEnd引用了域和DIInjectionWhatever以及我的DI容器。
在Project.DIInjectionWhatever我将所有部分绑在一起。所以这个项目包含了对实现和DI框架的所有引用。它包含用于注册组件的代码。 Autofac让我可以轻松地分解组件注册,这就是我采用这种方法的原因。
在这里的示例中,我的实现项目中没有对容器的任何引用。它没有任何问题,如果您的实现需要它,那么继续。