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

4

快速问题,以便我开始正确的方向。我有一个多项目解决方案,其中包含一个MVC表示层。目前,此层仅知道一个IServices类库。现在,如果我想使用IoC,似乎我将不得不在MVC应用程序中添加对解决方案中所有其他项目的引用,以便我可以配置IoC。

这是正确的吗?还是每个层都应该有自己的IoC?

谢谢,

詹姆斯

1个回答

1

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

通常情况下,dll加载会自动发生,而IoC的连接则以近乎硬编码的方式进行。

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

所有这些对于收缩包软件都是有意义的,但我不认为对于Web软件有很多好处。

我看到不引用其他库的唯一原因是确保没有人直接使用或访问其中声明的代码-这是一项繁琐的任务,有时是一个不可能的目标,它将封装移动到错误的级别。如果您的类被良好封装,这是不必要的。


那么通常来说,直接在MVC项目中引用程序集并在那里进行IoC的连接是被普遍接受的吗? - James
是的。你不会醒来说“今天,我要让网站在DB2上运行,而不是Cassandra”,如果你这样做了,那不仅仅是替换一个dll文件。 - mnemosyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接