新增模块注册

This commit is contained in:
falcon 2023-05-05 13:51:50 +08:00
parent 44100f9cf9
commit a17d7697e6
3 changed files with 129 additions and 0 deletions

View File

@ -0,0 +1,35 @@
using Falcon.SugarApi.ApiDefinistions;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Falcon.SugarApi.Test
{
/// <summary>
/// 模块注册测试
/// </summary>
[TestClass]
public class ModuleRegisterTest
{
/// <summary>
/// 注册测试
/// </summary>
[TestMethod]
public void RegisterTest() {
var services = new ServiceCollection() as IServiceCollection;
var cb = new ConfigurationBuilder();
var config = cb.Build() as IConfiguration;
ModuleRegister.ModuleServiceRegistration(services,"aaa",config);
var ab = new ApplicationBuilder(services.BuildServiceProvider());
ModuleRegister.ApplicationBuilder(ab,"aaa",config);
}
}
}

View File

@ -0,0 +1,31 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Reflection;
namespace Falcon.SugarApi.ApiDefinistions
{
/// <summary>
/// 模块注册接口
/// </summary>
public interface IModuleRegister
{
/// <summary>
/// 服务注册
/// </summary>
/// <param name="services">服务结合</param>
/// <param name="configuration">配置</param>
/// <returns>服务集合</returns>
public IServiceCollection ServiceRegister(IServiceCollection services,IConfiguration configuration);
/// <summary>
/// 应用注册
/// </summary>
/// <param name="application">应用创建器</param>
/// <param name="configuration">配置</param>
/// <returns>应用创建器</returns>
public IApplicationBuilder ApplicationRegister(IApplicationBuilder application,IConfiguration configuration);
}
}

View File

@ -0,0 +1,63 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Reflection;
namespace Falcon.SugarApi.ApiDefinistions
{
/// <summary>
/// 模块注册
/// </summary>
public static class ModuleRegister
{
/// <summary>
/// 模块服务注册
/// </summary>
/// <param name="services">服务集合</param>
/// <param name="moduleName">模块名称</param>
/// <param name="configuration">配置</param>
/// <returns>服务集合</returns>
/// <exception cref="Exception"></exception>
public static IServiceCollection ModuleServiceRegistration(IServiceCollection services,string moduleName,IConfiguration configuration) {
foreach(var mr in GetModuleRegister(moduleName)) {
mr.ServiceRegister(services,configuration);
}
return services;
}
/// <summary>
/// 应用注册
/// </summary>
/// <param name="application">应用创建器</param>
/// <param name="moduleName">模块名称</param>
/// <param name="configuration">配置</param>
/// <returns>应用创建器</returns>
public static IApplicationBuilder ApplicationBuilder(IApplicationBuilder application,string moduleName,IConfiguration configuration) {
foreach(var mr in GetModuleRegister(moduleName)) {
mr.ApplicationRegister(application,configuration);
}
return application;
}
private static IEnumerable<IModuleRegister> GetModuleRegister(string moduleName) {
Assembly ass;
try {
ass = Assembly.Load(moduleName);
}
catch(Exception ex) {
throw new Exception($"获取程序集{moduleName}错误!",ex);
}
var types = ass.GetTypes();
foreach(var type in types) {
if(type.GetInterface(typeof(IModuleRegister).FullName) != null) {
var obj = type.Assembly.CreateInstance(type.FullName);
if(obj is IModuleRegister mr) {
yield return mr;
}
}
}
}
}
}