Silky微服务框架在线文档Silky微服务框架在线文档
首页
文档
配置
源码解析
博文
github
gitee
  • 简体中文
  • English
首页
文档
配置
源码解析
博文
github
gitee
  • 简体中文
  • English
  • 简介

    • silky 框架介绍
  • 入门

    • 名词解释
    • 快速开始
    • 脚手架
    • 微服务模块化架构的最佳实践 & 约定
    • 示例
  • 主机与模块

    • 主机
    • 网关
    • 模块
    • 插件
  • 网关与 HTTP

    • Swagger 文档
    • 性能分析(MiniProfiler)
    • 跨域(CORS)
    • 审计日志
  • 服务与 RPC

    • 应用服务和服务条目
    • rpc通信
    • websocket通信
    •  服务注册中心
    • 服务治理
  • 数据与缓存

    • EFCore 数据访问
    • 缓存
    • 分布式锁
  • 安全与认证

    • 身份认证与授权
    • 分布式事务
  • 基础设施

    • 依赖注入
    • 对象到对象的映射
    • 参数验证
    • 链路跟踪
    • 日志(Serilog)
    • 健康检查
    • 消息总线(MassTransit)
    • 单元测试与集成测试

以插件的方式扫描添加应用服务

一般地,如果需要主机托管应用的话,需要主机所在的应用程序集引用应用服务的所在的程序集;

例如主机的项目程序集如下所示:


<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <OutputType>Exe</OutputType>
    </PropertyGroup>

    <ItemGroup>
        <ProjectReference Include="..\..\src\Silky.Agent.Host\Silky.Agent.Host.csproj" />
        <ProjectReference Include="..\TestApplication\TestApplication.csproj" /> <!--应用服务程序集-->
    </ItemGroup>
</Project>

除此之外,我们可以通过插件的方式指定应用服务所在的目录,这样我们无需直接引用应用服务程序集,通过扫描指定的目录实现对应用服务的解析。

  1. 通过配置的方式指定应用服务所在的目录

在配置文件appsettings.yaml添加如下配置:

plugInSource:
  appServicePlugIns:
    - folder: ../../../TestApplication/bin/Debug/net8.0
      searchOption: TopDirectoryOnly
  1. 通过应用服务启动配置项指定应用服务所在的目录

在构建主机时,我们可以通过代码的方式对SilkyApplicationCreationOptions的属性AppServicePlugInSources添加应用服务的目录;


        private static IHostBuilder CreateHostBuilder(string[] args)
        {
            var hostBuilder = Host
                    .CreateDefaultBuilder(args)
                    .ConfigureSilkyGeneralHostDefaults(options =>
                    {
                        // ...其他配置项
                        options.AppServicePlugInSources.Add(new ServicePlugInOption()
                        {
                            Folder = "../../../TestApplication/bin/Debug/net8.0"
                        });

                    })
                ;

            return hostBuilder;
        }

以插件的方式添加模块

我们知道,在 silky 的模块系统中,模块具有依赖关系,我们通过启动模块来确定模块与模块的依赖关系以及解析出系统所依赖的所有模块,也就是说,只有直接或是间接的的对模块进行依赖,才可以被系统解析到并在应用启动时被加载和执行。

silky 框架提供的注册 silky 服务已经默认指定了启动模块,所以,一般地我们无需修改启动模块,这个时候如果我们需要添加额外的业务模块,最好的方式就是以插件的方式添加模块。添加模块插件的方式与添加应用服务的方式雷同;

  1. 通过配置的方式指定模块类

在配置文件appsettings.yaml添加如下配置:

plugInSource:
  modulePlugIn:
    types:
      - TestApplication.TestModule,TestApplication
  1. 通过应用服务启动配置项指定模块类

在构建主机时,我们可以通过代码的方式对SilkyApplicationCreationOptions的属性ModulePlugInSources添加模块类;

 private static IHostBuilder CreateHostBuilder(string[] args)
        {
            var hostBuilder = Host
                    .CreateDefaultBuilder(args)
                    .ConfigureSilkyGeneralHostDefaults(options =>
                    {
                        // ...其他配置项
                          options.ModulePlugInSources.Add(new TypePlugInSource("TestApplication.TestModule,TestApplication"));

                    })
                ;

            return hostBuilder;
        }

编辑当前页
Prev
模块