Microsoft的Unity依赖注入框架可以通过代码或通过应用程序配置文件(app.config)进行配置.
代码示例:
IUnityContainer container = new UnityContainer()
.RegisterType<IInterface, ConcreteImplementation>();
Run Code Online (Sandbox Code Playgroud)
配置示例:
<unity>
<containers>
<container>
<types>
<type type="IInterface, MyAssembly"
mapTo="ConcreteImplementation, MyAssembly" />
Run Code Online (Sandbox Code Playgroud)
每种方法有哪些优点/缺点?我可以想到"用户可以轻松配置您的应用程序"的明显优势,以及"用户可以轻松破解您的应用程序"的明显缺点,但是有什么不那么明显吗?
configuration dependency-injection app-config ioc-container unity-container
我个人喜欢从C#代码配置StructureMap的选项.根据我的理解,DI的优点之一是我们可以轻松交换新的具体实例.但是,如果配置是在代码中定义的,那么具体实例在dll中是硬编码的.
所以,实际上,它与硬件编码依赖关系一样好,对吧?我知道,在测试过程中它会让生活更轻松......
我的观点是,使用xml配置不是更好吗?你想插入一个新的具体实例?只需让安装程序用新的文件覆盖structuremap.config文件.
那么,配置StructureMap的首选方法是什么?
额外:我暂时被迫使用C#配置,因为我不知道如何将连接字符串传递给实例.我可以在配置文件中编写连接字符串,但我想重用app.config中定义的连接字符串.
请参阅此问题的最佳答案:Spring Framework究竟是什么?
我不知道问题是什么,以及为什么Spring指定在XML文件中使用接口的实现(或使用注释)的解决方案比简单地让一行代码实例化正确的接口更好?
编辑:正如我在其中一篇评论中写的那样,我真的想要了解其中的好处.我想了解为什么Spring很有用.我不是主张不使用Spring或试图提供理由而不是,我正在寻找原因,并试图理解为什么应该使用它.这篇文章并不是为了鼓励辩论,而是为了直截了当和技术性的答案.我现在选择最短和最具说明性的答案作为正确的答案.我必须说这个问题已经结束我有点惊讶.