无名 发表于 2022-5-8 17:02:31

【LSP】Reface.AppStarter 基本示例


http://cdn.u1.huluxia.com/g4/M01/66/01/rBAAdl91auaAaMvUAACt4WdlvYs950.jpg
以模块化组织你的应用程序自动注册组件至 IOC 容器自动映射配置文件至配置类在模块定义类中额外追加组件至 IOC 容器在模块定义类中额外追加配置类事件总线这些功能允许让开发者将功能拆分至各个小粒度模块,当使用某个模块时,只需要向模块添加一个依赖,即可开启所有功能,实现了整个模块的开箱即用。本文将介绍 Reface.AppStarter 中最常用的三个功能 自动注册组件至 IOC 容器 、 自动映射配置文件 和 模块化。自动注册组件至 IOC 容器使用 IOC 容器 往往分为两个阶段配置阶段使用阶段在 配置阶段 我们可能会选择 配置文件 、对所有依赖的程序集反射 、 对指定程序反射 、 硬编码 等方式对组件进行 注册 。对所有依赖的程序集反射 ,怎么看都是一种即笨重又有些呆板的方法。然而另外几个方案在多模块化的项目里中 ,也无法很好的工作,它们各自需要在系统启动时,明确一些信息 :一共需要读取哪些配置文件,这些文件在各个子模块的哪儿一共需要对哪些程序集进行反射那些负责硬编码注册的类型都在哪儿如果上述的信息没有被收集完整,那么程序会因为没有注册全部组件而无法正确运行。事实上在大多数情况下,开发者在编写一个 接口 和一个 实现 时,就已经确定 注册关系 。只有那些可能面临 策略模式 ,或者存在多客户端适配的情况下,这种 注册关系 无法确定。所以通过 Attribute 加 扫描,是一种很好的 自动化注册 手段。假定我们需要实现下面的接口// Services/IUserService.cspublic interface IUserService{    void CreateUser(User user);}实现过程大致如下// Services/DefaultUserService.cspublic class DefaultUserService : IUserService{    private readonly IRepository<User> userRepo ;    public DefaultUserService(IRepository<User> userRepo)    {      this.userRepo = userRepo;    }    public void CreateUser(User user)    {      this.userRepo.Insert(user);    }}使用 Reface.AppStarter ,你不再需要编写额外的代码将这个 DefaultUserService 注册到 IUserService 上。你只需要为 DefaultUserService 添加一个 ComponentAttribute 。// Services/DefaultUserService.cspublic class DefaultUserService : IUserService{    // ...}这个 特征 就是通知 Reface.AppStarter 将该类型注册到 IOC 容器 中,并注册到它所有实现的接口类型上。在由 Reface.AppStarter 构建的系统中,程序不是单纯的由 程序集 组成,而是由 应用模块 组成。应用模块 不仅包含了 程序集 原有的功能,还能够体系与其它 应用模块 的依赖关系。现在我们为刚才 DefaultUserService 所在的 程序集 编写一个 应用模块 的类型。// UserAppModule.cspublic class UserAppModule : AppModule这就是一个 用户应用模块 ( 所有的 应用模块 应当从 AppModule 继承 ),它依赖了一个 ComponentScanAppModule 的 应用模块 。ComponentScanAppModule 会将 目标应用模块 中标记了 ComponentAttribute 的类型注册到 IOC 容器中。运行程序public static void Main(String[] args){    var app = AppSetup.Start<UserAppModule>();    IUserService service = app.CreateComponent<IUserService>();    // you can use service now;}http://cdn.u1.huluxia.com/g4/M01/66/01/rBAAdl91aueATb5NAADlcLWvzcU303.jpg
http://cdn.u1.huluxia.com/g4/M01/66/01/rBAAdl91auiAMqtEAAPyJwN-FlQ739.jpg
页: [1]
查看完整版本: 【LSP】Reface.AppStarter 基本示例