我基本上理解IoC框架是如何工作的,但是我不太了解的一件事是基于代码的配置应该如何工作。使用XML,我了解如何将新程序集添加到已部署的应用程序,然后更改XML中的配置以包含它。如果应用程序已经部署(即以某种形式编译),那么如何在不重新编译的情况下进行代码更改?或者是人们做什么,只需在代码中更改配置并重新编译?
答案 0 :(得分:14)
热插拔依赖项不是使用DI容器的唯一目标。
依赖注入(DI)是帮助我们开发松散耦合代码的原则。松散耦合仅意味着我们可以彼此独立地改变消费者和服务。 我们如何实现这一点并没有在这个层面得到解决。
DI容器是有助于将线路依赖关系结合在一起的框架。它们或多或少只是帮助我们应用DI模式的实用程序库。再一次,我们配置容器的如何与我们如何使用这些依赖关系垂直。
XML配置允许我们更改容器配置而无需重新编译。代码配置没有。
但是,在不重新编译的情况下交换依赖项通常仅与所有松散耦合代码的小子集相关。对于其他方法,基于约定的方法更有效,因为它往往不那么脆弱。有关详细信息,请参阅here。
答案 1 :(得分:2)
IoC和Dep注入可以帮助允许更改而无需重新编译(取决于所使用的工具),但不需要它。使用代码进行配置是关于配置容器,而不是关于部署后更改。是的,如果您在代码中进行更改,则通常需要重新编译。
答案 2 :(得分:1)
无需重新编译即可更改代码。无需重新加载App Pool即可更改存储在Web.Config中的配置。但是,您可以使用以下方案,您不必重新编译代码或回收应用程序池
1.将映射存储在外部配置文件中。 (XML很好)
2.编写一个函数,将外部文件中的映射加载到
你的容器
3.公开重新加载映射的函数
4.无论何时想要重新加载映射,只需调用暴露的映射
方法,你很高兴去:)。
您还可以在SQL服务器或任何其他位置存储映射。 (只需将它们加载到容器处理它所需的格式。)
答案 3 :(得分:0)
仅仅因为DI容器使用代码进行配置并不意味着没有重新编译就不能更改配置。它确实要求您仔细考虑您希望以这种方式配置的内容,并提供一些更改配置的方法(例如通过属性文件)。