在IoC参加最近的Alt.NET小组之后,我开始考虑可用的工具以及它们的工作方式。 StructureMap
特别使用属性和引导程序概念将IThing
的请求映射到ConcreteThing
。对于我来说,属性会自动抛出反射或IL注入的标记。有没有人确切知道这是如何工作的(对于StructureMap
或其他IoC工具)以及相关的开销可能是在运行时还是在编译时?
答案 0 :(得分:1)
我不能对其他IoC工具包说太多,但是我使用Spring.Net并且发现在启动时会有一次性的初始性能损失。配置容器后,应用程序将不受影响地运行。
答案 1 :(得分:1)
我使用来自CastleProject的Windsor,并发现它在减少依赖性方面非常有用。我还没有注意到性能问题,但我发现有一点是配置可能会有点麻烦。为了在这方面提供帮助,我开始关注Binsor,它是用Boo写的温莎DSL。
另一件要注意的事情是,在导航代码时,您将无法转到将在运行时执行的代码。
答案 2 :(得分:0)
他们的主要问题是代码变得难以理解。如果过度使用IoC,它可能会成为纯粹的魔法。另一个问题是性能。在大多数情况下,性能损失并不明显。但是当你开始通过IoC容器创建大部分对象时,它会突然降到海平面以下。
答案 3 :(得分:0)
我构建了一个非常轻量级的基本IOC,在这里:
http://blogs.microsoft.co.il/blogs/shay/archive/2008/09/30/building-custom-object-mapper.aspx
它不是您提到的库的替代品,但如果您需要的只是通过提供其界面来解析类型,那么它可能是一个完美的解决方案。
我不处理实例化类型(singleton,transient,thread,pool ...),所有对象都将被实例化为单例,你可以这样称呼它:
IRepository _repository = ObjectFactory.BuildFactory<IRepository>();
谢伊