-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatabasePlugin.cs
More file actions
73 lines (64 loc) · 2.99 KB
/
DatabasePlugin.cs
File metadata and controls
73 lines (64 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using sharwapi.Contracts.Core;
namespace Tyc_studio.Plugin.Database;
public class DatabasePlugin : IApiPlugin
{
public string Name => "database";
public string DisplayName => "Database";
public string Version => "0.1.0";
//di config
public void RegisterServices(IServiceCollection services, IConfiguration configuration)
{
/*services.AddSingleton<IDatabaseContext>(serviceProvider =>
{
return new DatabaseContext
{
ConnectionString = configuration.GetConnectionString("DefaultConnection") ?? throw new ArgumentException("DefaultConnection is required to be configured."),
DatabaseType = configuration.GetValue<string>($"{DatabaseContext.SectionName}:DatabaseType") ?? throw new ArgumentException("DatabaseType is required to be configured."),
CommandTimeout = configuration.GetValue<int>($"{DatabaseContext.SectionName}:CommandTimeout"),
UseTransaction = configuration.GetValue<bool>($"{DatabaseContext.SectionName}:UseTransaction"),
};
}); 仅供演示,用户需像这样注册一个IDatabaseContext */
services.AddSingleton<IDatabaseServiceFactory, DatabaseServiceFactory>();
services.AddOptions<DatabasePluginOptions>()
.Bind(configuration.GetSection(DatabasePluginOptions.SectionName));
//.ValidateDataAnnotations();
services.AddScoped<IDatabaseService>(serviceProvider =>
{
var context = serviceProvider.GetService<DatabaseContext>() ?? throw new ArgumentException("DatabaseContext is required to be registered.");
var factory = serviceProvider.GetRequiredService<IDatabaseServiceFactory>();
return factory.CreateService(context);
});
}
//middleware
public void Configure(WebApplication app) { }
//route config for web
public void RegisterRoutes(IEndpointRouteBuilder app, IConfiguration configuration)
{
if (configuration.GetValue<bool>($"{DatabasePluginOptions.SectionName}:ExposePluginWebApi"))
{
//TODO: plugin api expose
var group = app.MapGroup($"/{Name}");
group.MapGet("/test", async (IDatabaseService dbService) =>
{
try {
await dbService.TestConnectionAsync();
return Results.Ok(new {
success = true,
message = "连接测试成功!"
});
} catch (Exception ex) {
return Results.Problem(
title: "数据库连接失败!",
statusCode: 500,
detail: ex.ToString()
);
}
});
}
}
}