编写您自己的IOC容器
有人在C#写过自己的IOC容器吗? 或者绝大多数人使用各种框架,如Spring。 每个人的专业和意见是什么?
编写自己的文章是一个很好的练习,但最后你可能想要使用现有的容器。 您可以从15行代码开始。
我喜欢Ken Egozi的这款33线容器实现,灵感来自Ayende的15衬里
有人用C#编写了一个: http : //ninject.org/ 。
它是开源的,所以你可以得到代码,看看这个人是如何做到的。
除非有一个很好的理由我不会重新发明轮子并自己实现一个IoC容器,特别是因为有很多很好的选择,如Unity ,Ninject或Spring.net 。
如果您需要/想要删除对任何这些IoC容器的依赖性,您可以尝试使用Common Service Locator接口。
我在c#中编写了一个实现公共服务定位器的IoC / DI容器。 我写它主要是为了学习目的,但是当我完成它时,我决定把它作为开源。 如果您有任何人想尝试IInject ,可以在这里下载。
如果您正在寻找轻量级和高性能的IoC容器,那么您应该查看Munq
James Kovacs在这里介绍了关于这个主题的dnrTV剧集。 这里还写了一篇文章 。 然而,在文章中他提到你可能想要使用其中一个预制的。 因为它们有许多不同的外观。 Ninject,StructureMap,Autofac使用流畅的界面。 Spring,Castle Windsor和Unity更受XML配置驱动。 Castle Windsor也可以使用boo作为界面。 许多人都有其他框架的钩子,例如Unity to EntLib或Castle Windsor到Monorail以及城堡项目的其余部分。
因此,除非您确实需要或想要IOC框架未提供的内容,否则为什么不使用其中之一。
Autofac很棒。
我用不到15行写了一篇。 只是两个扩展方法到字典。
Ayende还写了一篇关于在他的博客文章中用15行代码构建一个IoC容器的文章。我相信他和其他人一样有意见:如果你不需要,不要建立自己的。
我创建了自己的IoC容器,可以更轻松地调试对象的创建(即使您无法访问容器代码)。 创建对象时,按步骤(F11),您将看到创建对象的代码。 完整的代码可以在这里看到。
IOC容器并不难写,它只是一个管理良好的全局递归工厂,具有一些潜在的附加function。 使用字典,reflection和委托来注册和构建一个简单的容器……
真正的问题是为什么以及另一个新的IOC容器框架能带来哪些好处?
在大多数情况下,您认为您需要更高的性能? 不存在的function? 但是大多数时候,现有的框架正是你需要的,而且足够了,除非你已经意识到框架迫使你去做所有使用它的废话。
ioc容器框架的所有实现都具有令人失望的力量,它具有反模式的顺序,但也有古怪和不可靠的语法,并且在强加耦合的情况下更糟糕,我决定自己去体验它。 这就是我将自己的(非常轻的)IOC容器作为开源的原因。
你可以在这里查看: Puresharp API .net 4.5.2+
- 最佳方法在c#中调用外部程序并解析输出
- FileUpload和UpdatePanel:ScriptManager.RegisterPostBackControl第二次工作
- Azure函数用于写入队列 – 我可以设置元数据吗?
- 为什么在继续使用其他内容时取消原始任务?
- 使用无效键值访问JArray值:“fields”。 预期数组位置索引
- C#中的数据库迁移
- ‘为’System.Windows.Baml2006.TypeConverterMarkupExtension’提供价值,引发了一个exception。 行号’49’和行位置’38’
- 拳击困惑。 将-1转换为Int64会引发InvalidCastException
- Office 365使用OutlookServicesClient发送带附件的电子邮件