Microsoft的Unity依赖注入框架可以通过代码或应用程序配置文件(app.config)进行配置。
代码示例:
IUnityContainer container = new UnityContainer()
.RegisterType<IInterface, ConcreteImplementation>();
配置示例:
<unity>
<containers>
<container>
<types>
<type type="IInterface, MyAssembly"
mapTo="ConcreteImplementation, MyAssembly" />
每种方法有哪些优点/缺点?我可以想到“用户可以轻松配置您的应用程序”的明显优势,以及明显的缺点“用户可以轻松破解您的应用程序”,但是有什么不太明显的吗?
答案 0 :(得分:31)
XML配置实际上只对单个事物有益:后期绑定。使用XML配置,您可以更改应用程序的组成方式,而无需重新编译整个应用程序。这与支持一定程度用户配置的 ISV应用程序特别相关。 ISV可以发送具有默认行为的已编译应用程序,但允许客户/用户通过更改配置来更改部分行为。
然而, XML配置是脆弱且冗长的。从开发人员的角度来看,使用它只是一种痛苦。
根据经验,更喜欢代码配置。但是,您可以将Code as Configuration与XML配置进行匹配,因此如果您有一些应该延迟绑定的依赖项,则可以使用XML配置。
答案 1 :(得分:10)
通过代码进行配置的一个显着缺点是代码需要对程序集的引用。这意味着我必须在项目中添加项目或DLL引用,以便编译代码。
依赖注入应该删除组件之间的依赖关系。通过代码初始化通过要求项目或DLL引用来重新引入依赖项。 xml配置文件可以引用任何程序集。
如果我基于接口创建新实现,我可以通过添加已编译的DLL并更新xml配置文件将新实现集成到现有应用程序中。如果我通过代码进行配置,我必须重新编译应用程序以替换实现。
答案 2 :(得分:2)
问题已经回答,但我想总结一下我的经验:
同时使用。 我将代码配置隐藏到扩展中,当我有几个标准配置(通常 - 因为我使用IoC)然后我有几个扩展,共享主配置。
我正在将XML配置用于非标准任务,例如性能调优(在重新编译需要很长时间的环境中)。