在多层应用程序中使用IoC时,避免使用程序集引用

时间:2011-11-30 15:55:24

标签: asp.net-mvc asp.net-mvc-3 inversion-of-control

快速提问,让我从正确的方向着手。我有一个带有MVC表示层的多项目解决方案。目前,该层只知道IServices类库。现在,如果我想使用IoC,我似乎必须开始在MVC应用程序的解决方案中添加对所有其他项目的引用,以便我可以配置IoC。

这是正确的还是每层都有自己的IoC?

谢谢,

詹姆斯

1 个答案:

答案 0 :(得分:1)

某人必须加载.dll文件,某人能够连接IoC。

通常情况下,dll加载会自动发生,IoC接线会以几乎硬编码的方式发生。

您可以动态加载库:您可以编写尝试加载给定文件夹中的每个dll并调用某种GetLibraryDescriptor方法的代码。该方法告诉您该库提供了一个实现,比如ISomeInterface。现在你可以让dll实例化它提供的那个类的对象。您可能必须将此实例化桥接到IoC。我相信这样的设计更适合服务定位器。

这一切对于收缩包装软件都有意义,但我没有看到网络软件的诸多好处。

不参考我看到的其他库的唯一原因是确保没有人直接使用或访问在那里声明的代码 - 这是一项繁琐的任务,有时候不可能将封装移到错误的级别。如果你的课程包装得很好,那就没必要了。