新增starup入口

master
huangixn 10 months ago
parent f1c7af14e5
commit ccb95e71a0

@ -15,6 +15,7 @@
<PackageReference Include="LanguageExt.Core" Version="4.4.7" />
<PackageReference Include="MediatR" Version="12.2.0" />
<PackageReference Include="Microsoft.AspNet.SignalR" Version="2.4.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.2.7" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.35.0" />

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DS.Module.Nuget\DS.Module.Nuget.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,103 @@
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace Ds.Module.AppStartup
{
/// <summary>
///
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class Ds_StartupAttribute : Attribute
{ }
public interface IDs_App_Startup
{
void ConfigureServices(IServiceCollection services);
void Configure(object app);
}
/// <summary>
///
/// </summary>
public static class Ds_App_Startup
{
public static void Run()
{
try
{
var startupTypes = Assembly.GetCallingAssembly().GetTypes()
.Where(type => type.GetCustomAttribute<Ds_StartupAttribute>() != null);
var services = new ServiceCollection();
foreach (var startupType in startupTypes)
{
var startupInstance = Activator.CreateInstance(startupType) as IDs_App_Startup;
startupInstance?.ConfigureServices(services);
}
// 构建 IServiceProvider
var serviceProvider = services.BuildServiceProvider();
foreach (var startupType in startupTypes)
{
var startupInstance = Activator.CreateInstance(startupType);
var configureMethod = startupType.GetMethod("Configure");
if (configureMethod != null)
{
configureMethod.Invoke(startupInstance, new[] { serviceProvider });
}
}
}
catch (Exception ex)
{
// 友好的错误消息和日志记录
Console.WriteLine($"An error occurred: {ex.Message}");
// 日志记录
// Logger.LogError(ex, "An error occurred during startup.");
}
}
}
//// 示例启动类
//[MyFrameworkStartup]
//public class MyFrameworkStartup : IMyFrameworkStartup
//{
// public void ConfigureServices(IServiceCollection services)
// {
// // 配置服务
// services.AddTransient<IMyService, MyService>();
// // 其他服务配置...
// }
// public void Configure(object app)
// {
// // 配置中间件
// // 其他中间件配置...
// }
//}
// 示例服务
//public interface IMyService
//{
// void DoSomething();
//}
//public class MyService : IMyService
//{
// public void DoSomething()
// {
// Console.WriteLine("Doing something...");
// }
//}
//internal class Program
//{
// private static void Main()
// {
// MyFramework.Run();
// }
//}
}

@ -43,6 +43,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DS.Module.Nuget", "DS.Modul
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds.Module.WeChat", "Ds.Module.WeChat\Ds.Module.WeChat.csproj", "{5E1D485F-6569-4311-9D60-755D0BFB4CF7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds.Module.AppStartup", "Ds.Module.AppStartup\Ds.Module.AppStartup.csproj", "{C9345967-044E-40E3-AFB6-B3AE881D9777}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -117,6 +119,10 @@ Global
{5E1D485F-6569-4311-9D60-755D0BFB4CF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5E1D485F-6569-4311-9D60-755D0BFB4CF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5E1D485F-6569-4311-9D60-755D0BFB4CF7}.Release|Any CPU.Build.0 = Release|Any CPU
{C9345967-044E-40E3-AFB6-B3AE881D9777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9345967-044E-40E3-AFB6-B3AE881D9777}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9345967-044E-40E3-AFB6-B3AE881D9777}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C9345967-044E-40E3-AFB6-B3AE881D9777}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -139,6 +145,7 @@ Global
{C1FD8E3A-980C-4227-B3D7-824C1529697C} = {518DB9B5-80A8-4B2C-8570-52BD406458DE}
{B2CA3885-C3D5-4A67-AA1C-18EF0B80F3B6} = {518DB9B5-80A8-4B2C-8570-52BD406458DE}
{5E1D485F-6569-4311-9D60-755D0BFB4CF7} = {518DB9B5-80A8-4B2C-8570-52BD406458DE}
{C9345967-044E-40E3-AFB6-B3AE881D9777} = {518DB9B5-80A8-4B2C-8570-52BD406458DE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {66115F23-94B4-43C0-838E-33B5CF77F788}

Loading…
Cancel
Save