using System.Reflection; using DS.Module.Core.Exceptions; using Microsoft.Extensions.DependencyInjection; namespace DS.Module.Core.Modules; public class DSAppModule : IDSAppModule { public bool Enable { get; set; } = true; private ConfigureServicesContext _configureServicesContext; public virtual void ApplicationInitialization(ApplicationContext context) { } public virtual void ConfigureServices(ConfigureServicesContext context) { } protected internal ConfigureServicesContext ConfigureServicesContext { get { if (_configureServicesContext == null) { //throw new DSAppException($"{nameof(ConfigureServicesContext)}仅适用于{nameof(ConfigureServices)}方法。"); } return _configureServicesContext; } internal set => _configureServicesContext = value; } /// /// 获取模块程序集 /// /// /// public Type[] GetDependedTypes(Type moduleType = null) { if (moduleType == null) { moduleType = GetType(); } var dependedTypes = moduleType.GetCustomAttributes().OfType().ToArray(); if (dependedTypes.Length == 0) { return new Type[0]; } List dependList = new List(); foreach (var dependedType in dependedTypes) { var dependeds = dependedType.GetDependedTypes(); if (dependeds.Length == 0) { continue; } dependList.AddRange(dependeds); foreach (Type type in dependeds) { dependList.AddRange(GetDependedTypes(type)); } } return dependList.Distinct().ToArray(); } /// /// 判断是否是模块 /// /// /// public static bool IsAppModule(Type type) { var typeInfo = type.GetTypeInfo(); return typeInfo.IsClass && !typeInfo.IsAbstract && !typeInfo.IsGenericType && typeof(IDSAppModule).GetTypeInfo().IsAssignableFrom(type); } public void Configure(Action configureOptions) where TOptions : class { ConfigureServicesContext.Services.Configure(configureOptions); } }