My.Ioc 是做者开发的一款开源 IoC/DI 框架,下载地址在此处。它具备下面一些特色:html
高效缓存
在实现手段上,My.Ioc 经过使用泛型、缓存、动态生成代码、延迟注册、尽可能使用抽象类而非接口等方式来提升框架的性能。若是您想进一步了解经过上面这些手段,咱们可以得到怎样的性能,请看这篇文章。安全
便于扩展多线程
在设计时,可扩展性是做者始终关注的问题之一。My.Ioc 也确实提供了良好的可扩展性。您能够经过如下方式实现扩展:app
1. 自定义 Lifetime 实现。框架
2. 注册自定义 ObjectBuilderRequested 事件 Handler 以实现延迟注册(参见这篇文章)。函数
3. 经过添加自定义 IConstructorInjectionConfigurationItem/IMemberInjectionConfigurationItem 以及修改现有 IInjectionConfigurationInterpreter 的方式增长或修改对象建立逻辑(参见这篇文章)。例如,要想给某个现有注册项增长 Decorator,能够经过增长一个 IConstructorInjectionConfigurationItem 的方式来实现。性能
配置简单ui
使用代码方式进行注册,而没必要编写一大堆配置文件那么繁琐。固然,配置方式是能够扩展的,并且也很容易扩展。若是您喜欢,您也能够自行实现一个经过配置文件进行注册的机制。spa
功能全面
面向服务考虑
在面向服务环境中,服务常常处于变化之中。一个服务可能在这一时刻可用,但下一时刻已不可用。为此,框架提供了注销 (Unregister) 功能和观察者 (IObjectObserver/IObjectCollectionObserver) 机制来适应这种变化。使用者能够在运行过程当中随时注销某个服务实现(前提是该实现由该使用者注册,并且该使用者在注册服务时保留了该服务的 IObjectRegistration 对象)或注册新的服务实现以替代已被注销/过时 (Obsolete) 的服务实现,而其余依赖于该服务的上层服务将会随着该服务的注销/注册而自动停用/激活,相关的观察者则会向自身的 Changed 事件订阅者发送服务激活 (Activated)/停用 (Deactivated) 的通知。
富于交互性
框架提供了 ObjectBuilderRegistered/ObjectBuilderUnregistering/ObjectBuilderRequested 事件、IObjectObserver/IObjectCollectionObserver 的通知事件、ILifetimeScope 的 LifetimeScopeEnded 事件(可用于在资源释放后执行自定义操做)、IObjectRegistration 的 Changed 事件等各种事件,使用者能够根据须要订阅它们,以实现与框架的交互。
安全性
安全性是做者在设计时的重要考量之一。框架具有线程安全性,可用于多线程环境中。此外,框架经过 ILifetimeScope 来管理资源的释放 (Dispose)。使用者在解析(获取)对象/服务时,必须指定相应的 ILifetimeScope,并在使用完成后正确释放 ILifetimeScope,从而确保资源安全性。最后,框架遵循最小可访问性原则(尽可能使用 private、protected、internal,少用 public),以保证良好的封装和可见性控制,从而防止 Api 滥用或误用。
零侵入性
同安全性同样,侵入性也是做者在设计时的考量之一。所以,咱们摒弃了其余一些 Ioc 框架(例如 NInject/Unity)所采用的经过 Attribute 标注实现某些功能的方式(例如标注某个要注入的构造函数/属性/方法等),转而要求使用者在注册时提供具体信息(例如在配置方法注入时,只需提供方法名称便可。但若是该方法含有多个重载,则需提供具体的 MethodInfo),以保证框架的零侵入性。