c#之Stylet开发文档 14.1 StyletIoC

StyletIoC介绍

StyletIoC是一个非常轻量级和非常快速的IoC容器。它被设计为只做几件事,但以直观的方式把它们做好。

它使用流畅的接口进行配置——没有XML垃圾。它也没有依赖性。

我现在假设您对IoC容器的概念相当有信心——如果没有,请阅读一些内容并返回。我以后可能会写一篇更深入的介绍。

服务和实施

StyletIoC是围绕服务的概念构建的。服务是一种具体类型、抽象类型或接口,由具体类型实现(或可以实现),例如:

interface IVehicle { ... }
class HotHatchback : IVehicle { ... }

这里,IVehicle是服务,而HotHatchback是实现它的具体类型。请注意,HotHatchback也是一个服务-一个由HotHatchack类本身实现的服务。

当您配置StyletIoC时,您定义了一组关系。每个关系都是在一个服务和实现它的类型之间。因此,在这里,我们可以告诉StyletIoC“在服务IVehicle和类型HotHatchback之间创建一个关系”。

稍后,当您想要实现IVehicle时,您可以要求StyletIoC“给我一个实现服务IVehicl的实例,StyletIoC将构造一个HotHatchback并将其传递回您。

解析类型-服务定位器和注入

有三种方法可以让StyletIoC为我们构造类型:

  1. 通过直接调用IContainer.Get
  2. 构造器注入
  3. 属性注入(Property Injection)

直接调用IContainer.Get是最容易解释的,如下所示:

var ioc = ... // Covered in lots of detail elsewhere
var vehicle = ioc.Get<IVehicle>();

尽管这看起来很诱人,但这应该只在应用程序的根目录中完成——在其他地方使用构造函数注入和参数注入。

当StyletIoC为您构造类型时,它将寻找一个构造函数,该构造函数具有它知道如何解析的类型参数。然后,它将解析这些类型,并将它们注入构造函数。例如:

class Engine { ... }
class Car
{
   public Car(Engine engine)
   {
      // 'engine' contains a new instance of Engine
   }
}

这是StyletIoC中新实例的最常见方式-StyletIoC构造的每一种类型都在其构造函数中列出其依赖项,StyletIO将构造其中的每一个,同时注入其依赖项。

如果您愿意,您也可以进行参数注入,前提是要注入的参数具有属性[Inject],例如:

class Engine { ... }
class Car
{
   [Inject]
   public Engine Engine { get; set; }
}

每种方法的不同优点在其他地方讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值