• 产品
  • 下载
  • 文档
  • 新闻
  • 社区

GKarch GKarch Logo

  • 产品
  • 下载
  • 文档
  • 新闻
  • 社区

IoC / DI 功能

控制反转 / 依赖注入已经逐渐成为软件的必备基础设施,软件功能的解耦、扩展都需要依赖它。而现在 .NET 上的 IoC / DI 框架也已经十分成熟,Glacier 提供了统一的依赖解析接口,集成了一个轻量级的 IoC / DI 框架,并且也提供对更复杂成熟的框架的对接,支持各种应用场景。

统一依赖解析接口

Glacier 统一了依赖解析接口,在需要一个接口的实现时,使用统一的语法来获取:

var foo = core.Resolver.Get<IFoo>();
var fooKeyed = core.Resolver.Get<IFoo>("key");
var barTyped = core.Resolver.Get(typeof(IBar));
var allBaz = core.Resolver.GetAll<IBaz>();
// 还有一些TryGet的方法来尝试解析

这里的Resolver实现了IDependencyResolver接口,这个接口抽象了 IoC / DI 框架的依赖解析方接口,类似于CommonServiceLocator,用来隔离不同 IoC / DI 框架的依赖解析方式,对开发者提供一致的外观。

实现

IDependencyResolver接口目前有四个实现:

  • DefaultDependencyResolver - 默认实现,使用集成的LightInject
  • LightInjectDependencyResolver - 对接LightInject框架
  • NinjectDependencyResolver - 对接Ninject框架
  • AutofacDependencyResolver - 对接Autofac框架

用户也可以自行实现IDependencyResolver接口,对接其它 IoC / DI 框架,然后对核心进行设置:

core.Resolver = new MyResolver();        // 设置单独核心的依赖解析
GlacierSystem.Resolver = new MyResolver(); // 设置全局核心的依赖解析

更多信息见Glacier 的文档。

集成的 IoC / DI 框架

Glacier使用代码方式集成了LightInject框架,内部功能使用它来组合。

LightInject 是一个非常高效的轻量级 IoC / DI 框架,适合用于其它框架内部。对于规模不大的应用,也可以在外部使用。

如果尚未接触过 IoC / DI 框架,或者使用过 LightInject,那么可以直接使用 Glacier 集成的 LightInject 框架:

// 推荐方式,使用 CompositionRoot 来统一注册服务:
class MyCompositionRoot : ICompositionRoot
{
    public void Compose(IServiceRegistry serviceRegistry)
    {
        serviceRegistry.Register<IFoo, Foo>();
    }
}

core.Source.RegisterFrom<MyCompositionRoot>();

// 获取时:
var foo = core.Resolver.Get<IFoo>();

对接的第三方 IoC / DI 框架

如前所述,Glacier 目前对接了三种第三方 IoC / DI 框架,LightInject、Ninject 和 Autofac。如果已经熟悉或者已经使用了它们,那么可以使用相应的对接来让 Glacier 支持它们。

这些对接都是独立的 NuGet 包,可以按需使用。

LightInject 对接

安装 GKarch.Ioc.LightInject4,在 VS 中使用

PM> Install-Package GKarch.Ioc.LightInject4

GKarch.Ioc.LightInject4 包,对接LightInject的 4.x 版本。(注:由于依赖的LightInject未签名,该程序集也未签名)

其提供LightInjectDependencyResolver类,使用时

// container 为LightInject的IServiceContainer实现
core.Resolver = new LightInjectDependencyResolver(container);

Ninject 对接

安装 GKarch.Ioc.Ninject3,在 VS 中使用

PM> Install-Package GKarch.Ioc.Ninject3

GKarch.Ioc.Ninject3 包,对接Ninject的 3.x 版本。

其提供NinjectDependencyResolver类,使用时

core.Resolver = new NinjectDependencyResolver(kernel); // kernel 为Ninject的IKernel实现

Autofac 对接

安装 GKarch.Ioc.Autofac3,在 VS 中使用

PM> Install-Package GKarch.Ioc.Autofac3

GKarch.Ioc.Autofac3 包,对接Autofac的 3.x 版本。

安装 GKarch.Ioc.Autofac4,在 VS 中使用

PM> Install-Package GKarch.Ioc.Autofac4

GKarch.Ioc.Autofac4 包,对接 Autofac 的 4.x 版本。

其提供AutofacDependencyResolver类,使用时

core.Resolver = new AutofacDependencyResolver(container);
// container 为Autofac的IContainer实现
上一篇 下一篇

Getting Started

  • 简介
  • Glacier
  • IoC / DI 功能
  • 配置功能
  • 日志功能
  • 组件模型

Tundra

  • 程序单一实例工具
  • 高精度定时器

BaoBros

FAQ | 使用条款 | 博客 | 联系我们 | 粤ICP备15049704号
深圳包子兄弟科技有限公司 版权所有