Skip to content

Commit c172a23

Browse files
committed
CO2NET v3.0.0-beta3
1 parent 9e0c9c4 commit c172a23

File tree

5 files changed

+283
-166
lines changed

5 files changed

+283
-166
lines changed

src/Senparc.CO2NET/Register.cs

Lines changed: 141 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -1,146 +1,147 @@
1-
/*----------------------------------------------------------------
2-
Copyright (C) 2024 Senparc
3-
4-
FileName: Register.cs
5-
File Function Description: Senparc.CO2NET quick registration process (including Thread, TraceLog, etc.)
6-
7-
8-
Creation Identifier: Senparc - 20180222
9-
10-
Modification Identifier: Senparc - 20180516
11-
Modification Description: Optimize RegisterService
12-
13-
Modification Identifier: Senparc - 20180704
14-
Modification Description: v0.1.6.1 Add Register.UseSenparcGlobal() method
15-
16-
Modification Identifier: Senparc - 20180707
17-
Modification Description: v0.1.9 Remove senparcSetting parameter from UseSenparcGlobal() method, as it is already provided in RegisterService.Start
18-
19-
----------------------------------------------------------------*/
20-
21-
22-
23-
using System;
24-
using Senparc.CO2NET.Threads;
25-
using Senparc.CO2NET.RegisterServices;
26-
using Senparc.CO2NET.Cache;
27-
using System.Collections.Generic;
28-
using System.Linq;
29-
using Senparc.CO2NET.Helpers;
30-
using Senparc.CO2NET.Extensions;
31-
using Microsoft.Extensions.Configuration;
32-
33-
34-
namespace Senparc.CO2NET
35-
{
36-
/// <summary>
37-
/// Senparc.CO2NET basic information registration
38-
/// </summary>
39-
public static class Register
40-
{
41-
/// <summary>
42-
/// Modify the default cache namespace
43-
/// </summary>
44-
/// <param name="registerService">RegisterService</param>
45-
/// <param name="customNamespace">Custom namespace name</param>
1+
/*----------------------------------------------------------------
2+
Copyright (C) 2024 Senparc
3+
4+
FileName: Register.cs
5+
File Function Description: Senparc.CO2NET quick registration process (including Thread, TraceLog, etc.)
6+
7+
8+
Creation Identifier: Senparc - 20180222
9+
10+
Modification Identifier: Senparc - 20180516
11+
Modification Description: Optimize RegisterService
12+
13+
Modification Identifier: Senparc - 20180704
14+
Modification Description: v0.1.6.1 Add Register.UseSenparcGlobal() method
15+
16+
Modification Identifier: Senparc - 20180707
17+
Modification Description: v0.1.9 Remove senparcSetting parameter from UseSenparcGlobal() method, as it is already provided in RegisterService.Start
18+
19+
----------------------------------------------------------------*/
20+
21+
22+
23+
24+
using System;
25+
using Senparc.CO2NET.Threads;
26+
using Senparc.CO2NET.RegisterServices;
27+
using Senparc.CO2NET.Cache;
28+
using System.Collections.Generic;
29+
using System.Linq;
30+
using Senparc.CO2NET.Helpers;
31+
using Senparc.CO2NET.Extensions;
32+
using Microsoft.Extensions.Configuration;
33+
34+
35+
namespace Senparc.CO2NET
36+
{
37+
/// <summary>
38+
/// Senparc.CO2NET basic information registration
39+
/// </summary>
40+
public static class Register
41+
{
42+
/// <summary>
43+
/// Modify the default cache namespace
44+
/// </summary>
45+
/// <param name="registerService">RegisterService</param>
46+
/// <param name="customNamespace">Custom namespace name</param>
4647
/// <returns></returns>
47-
public static IRegisterService ChangeDefaultCacheNamespace(this IRegisterService registerService, string customNamespace)
48-
{
49-
Config.DefaultCacheNamespace = customNamespace;
50-
return registerService;
51-
}
52-
53-
54-
/// <summary>
55-
/// Method to register Threads (if this thread is not registered, AccessToken, JsTicket, etc. cannot use SDK for automatic storage and management)
56-
/// </summary>
57-
/// <param name="registerService">RegisterService</param>
48+
public static IRegisterService ChangeDefaultCacheNamespace(this IRegisterService registerService, string customNamespace)
49+
{
50+
Config.DefaultCacheNamespace = customNamespace;
51+
return registerService;
52+
}
53+
54+
55+
/// <summary>
56+
/// Method to register Threads (if this thread is not registered, AccessToken, JsTicket, etc. cannot use SDK for automatic storage and management)
57+
/// </summary>
58+
/// <param name="registerService">RegisterService</param>
5859
/// <returns></returns>
59-
public static IRegisterService RegisterThreads(this IRegisterService registerService)
60-
{
61-
ThreadUtility.Register();// If this thread is not registered, AccessToken, JsTicket, etc. cannot use SDK for automatic storage and management.
62-
return registerService;
63-
}
64-
65-
/// <summary>
66-
/// Method to register TraceLog
67-
/// </summary>
68-
/// <param name="registerService">RegisterService</param>
69-
/// <param name="action"></param>
60+
public static IRegisterService RegisterThreads(this IRegisterService registerService)
61+
{
62+
ThreadUtility.Register();// If this thread is not registered, AccessToken, JsTicket, etc. cannot use SDK for automatic storage and management.
63+
return registerService;
64+
}
65+
66+
/// <summary>
67+
/// Method to register TraceLog
68+
/// </summary>
69+
/// <param name="registerService">RegisterService</param>
70+
/// <param name="action"></param>
7071
/// <returns></returns>
71-
public static IRegisterService RegisterTraceLog(this IRegisterService registerService, Action action)
72-
{
73-
action();
74-
return registerService;
75-
}
76-
77-
/// <summary>
78-
/// Start Senparc.CO2NET initialization parameter process
79-
/// </summary>
80-
/// <param name="registerService"></param>
81-
/// <param name="autoScanExtensionCacheStrategies">Whether to automatically scan global extension caches (will increase system startup time)</param>
82-
/// <param name="extensionCacheStrategiesFunc"><para>Extension cache strategies that need to be manually registered</para>
83-
/// <para>(LocalContainerCacheStrategy, RedisContainerCacheStrategy, MemcacheContainerCacheStrategy are already automatically registered),</para>
84-
/// <para>If set to null (note: not delegate returning null, but the entire delegate parameter is null), it will automatically use reflection to scan all possible extension cache strategies</para></param>
72+
public static IRegisterService RegisterTraceLog(this IRegisterService registerService, Action action)
73+
{
74+
action();
75+
return registerService;
76+
}
77+
78+
/// <summary>
79+
/// Start Senparc.CO2NET initialization parameter process
80+
/// </summary>
81+
/// <param name="registerService"></param>
82+
/// <param name="autoScanExtensionCacheStrategies">Whether to automatically scan global extension caches (will increase system startup time)</param>
83+
/// <param name="extensionCacheStrategiesFunc"><para>Extension cache strategies that need to be manually registered</para>
84+
/// <para>(LocalContainerCacheStrategy, RedisContainerCacheStrategy, MemcacheContainerCacheStrategy are already automatically registered),</para>
85+
/// <para>If set to null (note: not delegate returning null, but the entire delegate parameter is null), it will automatically use reflection to scan all possible extension cache strategies</para></param>
8586
/// <returns></returns>
86-
public static IRegisterService UseSenparcGlobal(this IRegisterService registerService, bool autoScanExtensionCacheStrategies = false, Func<IList<IDomainExtensionCacheStrategy>> extensionCacheStrategiesFunc = null)
87-
{
88-
// Register extension cache strategies
89-
CacheStrategyDomainWarehouse.AutoScanDomainCacheStrategy(autoScanExtensionCacheStrategies, extensionCacheStrategiesFunc);
90-
91-
return registerService;
92-
}
93-
94-
95-
96-
#if !NET462
97-
98-
/// <summary>
99-
/// Start Senparc.CO2NET initialization parameter process
100-
/// </summary>
101-
/// <param name="senparcSetting">SenparcSetting object</param>
102-
/// <param name="registerConfigure">RegisterService settings</param>
103-
/// <param name="autoScanExtensionCacheStrategies">Whether to automatically scan global extension caches (will increase system startup time)</param>
104-
/// <param name="extensionCacheStrategiesFunc"><para>Extension cache strategies that need to be manually registered</para>
105-
/// <para>(LocalContainerCacheStrategy, RedisContainerCacheStrategy, MemcacheContainerCacheStrategy are already automatically registered),</para>
106-
/// <para>If set to null (note: not delegate returning null, but the entire delegate parameter is null), it will automatically use reflection to scan all possible extension cache strategies</para></param>
87+
public static IRegisterService UseSenparcGlobal(this IRegisterService registerService, bool autoScanExtensionCacheStrategies = false, Func<IList<IDomainExtensionCacheStrategy>> extensionCacheStrategiesFunc = null)
88+
{
89+
// Register extension cache strategies
90+
CacheStrategyDomainWarehouse.AutoScanDomainCacheStrategy(autoScanExtensionCacheStrategies, extensionCacheStrategiesFunc);
91+
92+
return registerService;
93+
}
94+
95+
96+
97+
#if !NET462
98+
99+
/// <summary>
100+
/// Start Senparc.CO2NET initialization parameter process
101+
/// </summary>
102+
/// <param name="senparcSetting">SenparcSetting object</param>
103+
/// <param name="registerConfigure">RegisterService settings</param>
104+
/// <param name="autoScanExtensionCacheStrategies">Whether to automatically scan global extension caches (will increase system startup time)</param>
105+
/// <param name="extensionCacheStrategiesFunc"><para>Extension cache strategies that need to be manually registered</para>
106+
/// <para>(LocalContainerCacheStrategy, RedisContainerCacheStrategy, MemcacheContainerCacheStrategy are already automatically registered),</para>
107+
/// <para>If set to null (note: not delegate returning null, but the entire delegate parameter is null), it will automatically use reflection to scan all possible extension cache strategies</para></param>
107108
/// <returns></returns>
108-
public static IRegisterService UseSenparcGlobal(
109-
SenparcSetting senparcSetting,
110-
Action<RegisterService> registerConfigure,
111-
bool autoScanExtensionCacheStrategies = false,
112-
Func<IList<IDomainExtensionCacheStrategy>> extensionCacheStrategiesFunc = null)
113-
{
114-
// Initialize global RegisterService object and store SenparcSetting information
115-
var register = RegisterService.Start(senparcSetting);
116-
RegisterService.Object = register;
117-
118-
registerConfigure?.Invoke(register);
119-
120-
return register.UseSenparcGlobal(autoScanExtensionCacheStrategies, extensionCacheStrategiesFunc);
121-
}
122-
123-
124-
/// <summary>
125-
/// Start Senparc.CO2NET initialization parameter process
126-
/// </summary>
127-
/// <param name="app">configuration source</param>
128-
/// <param name="senparcSetting">SenparcSetting object</param>
129-
/// <param name="registerConfigure">RegisterService settings</param>
130-
/// <param name="autoScanExtensionCacheStrategies">Whether to automatically scan global extension caches (will increase system startup time)</param>
131-
/// <param name="extensionCacheStrategiesFunc"><para>Extension cache strategies that need to be manually registered</para>
132-
/// <para>(LocalContainerCacheStrategy, RedisContainerCacheStrategy, MemcacheContainerCacheStrategy are already automatically registered),</para>
133-
/// <para>If set to null (note: not delegate returning null, but the entire delegate parameter is null), it will automatically use reflection to scan all possible extension cache strategies</para></param>
109+
public static IRegisterService UseSenparcGlobal(
110+
SenparcSetting senparcSetting,
111+
Action<RegisterService> registerConfigure,
112+
bool autoScanExtensionCacheStrategies = false,
113+
Func<IList<IDomainExtensionCacheStrategy>> extensionCacheStrategiesFunc = null)
114+
{
115+
// Initialize global RegisterService object and store SenparcSetting information
116+
var register = RegisterService.Start(senparcSetting);
117+
RegisterService.Object = register;
118+
119+
registerConfigure?.Invoke(register);
120+
121+
return register.UseSenparcGlobal(autoScanExtensionCacheStrategies, extensionCacheStrategiesFunc);
122+
}
123+
124+
125+
/// <summary>
126+
/// Start Senparc.CO2NET initialization parameter process
127+
/// </summary>
128+
/// <param name="app">configuration source</param>
129+
/// <param name="senparcSetting">SenparcSetting object</param>
130+
/// <param name="registerConfigure">RegisterService settings</param>
131+
/// <param name="autoScanExtensionCacheStrategies">Whether to automatically scan global extension caches (will increase system startup time)</param>
132+
/// <param name="extensionCacheStrategiesFunc"><para>Extension cache strategies that need to be manually registered</para>
133+
/// <para>(LocalContainerCacheStrategy, RedisContainerCacheStrategy, MemcacheContainerCacheStrategy are already automatically registered),</para>
134+
/// <para>If set to null (note: not delegate returning null, but the entire delegate parameter is null), it will automatically use reflection to scan all possible extension cache strategies</para></param>
134135
/// <returns></returns>
135-
public static (IConfigurationRoot app, IRegisterService registerService) UseSenparcGlobal(
136-
this IConfigurationRoot app,
137-
SenparcSetting senparcSetting,
138-
Action<RegisterService> registerConfigure,
139-
bool autoScanExtensionCacheStrategies = false,
140-
Func<IList<IDomainExtensionCacheStrategy>> extensionCacheStrategiesFunc = null)
141-
{
142-
return (app, UseSenparcGlobal(senparcSetting, registerConfigure, autoScanExtensionCacheStrategies, extensionCacheStrategiesFunc));
143-
}
144-
#endif
145-
}
146-
}
136+
public static (IConfigurationRoot app, IRegisterService registerService) UseSenparcGlobal(
137+
this IConfigurationRoot app,
138+
SenparcSetting senparcSetting,
139+
Action<RegisterService> registerConfigure,
140+
bool autoScanExtensionCacheStrategies = false,
141+
Func<IList<IDomainExtensionCacheStrategy>> extensionCacheStrategiesFunc = null)
142+
{
143+
return (app, UseSenparcGlobal(senparcSetting, registerConfigure, autoScanExtensionCacheStrategies, extensionCacheStrategiesFunc));
144+
}
145+
#endif
146+
}
147+
}

src/Senparc.CO2NET/Senparc.CO2NET.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFrameworks>net462;netstandard2.0;netstandard2.1</TargetFrameworks>
4-
<Version>3.0.0-beta1</Version>
5-
<LangVersion>8.0</LangVersion>
4+
<Version>3.0.0-beta3</Version>
5+
<LangVersion>10.0</LangVersion>
66
<AssemblyName>Senparc.CO2NET</AssemblyName>
77
<RootNamespace>Senparc.CO2NET</RootNamespace>
88
<GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>
@@ -140,7 +140,8 @@
140140
[2024-08-23] v2.5.0 Create dependency injection registration for IBaseObjectCacheStrategy
141141
[2024-08-23] v2.5.1 Update DateTimeHelper.GetDateTimeOffsetFromXml() method #297 Thanks @zhaoyangguang
142142
[2024-09-11] v2.5.2 Update Cache, remove InsertToCache(), add Count(prefix)
143-
[2024-10-24] v3.0.0 Upgrade to English version
143+
[2024-10-24] v3.0.0-beta1 Upgrade to English version
144+
[2024-10-24] v3.0.0-beta3 Add ApiClient and ApiClientHelper
144145
</PackageReleaseNotes>
145146
<RepositoryUrl>https://github.com/Senparc/Senparc.CO2NET</RepositoryUrl>
146147
<Configurations>Debug;Release;Test</Configurations>

src/Senparc.CO2NET/WebApi/ApiBind/ApiBindAttribute.cs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
Modification Identifier: Senparc - 20230614
1111
Modification Description: v1.4.1 Ignore added virtual keyword
1212
13+
Modification Identifier:Senparc - 20241119
14+
Modification Description:v3.0.0-beta3 add GetGlobalName() method and rename GetName() to GetApiBindAttrName()
15+
1316
----------------------------------------------------------------*/
1417

1518
using Senparc.CO2NET.WebApi;
1619
using System;
1720
using System.Reflection;
21+
using System.Runtime.CompilerServices;
1822

1923
namespace Senparc.CO2NET
2024
{
@@ -86,7 +90,8 @@ public ApiBindAttribute(string category, string name) : this(category, name, Web
8690
/// <param name="category">Category (platform type), used for grouping when outputting API Url</param>
8791
/// <param name="name">Unique name within the platform (if using PlatformType.General, please use a globally unique name)</param>
8892
/// <param name="apiRequestMethod">Current API request type, if null, the globally defined type of this engine will be used</param>
89-
public ApiBindAttribute(string category, string name, ApiRequestMethod apiRequestMethod) : this(category, name, WebApi.ApiRequestMethod.GlobalDefault, null, 0)
93+
public ApiBindAttribute(string category, string name, ApiRequestMethod apiRequestMethod)
94+
: this(category, name, WebApi.ApiRequestMethod.GlobalDefault, null, 0)
9095
{
9196
}
9297

@@ -96,7 +101,7 @@ public ApiBindAttribute(string category, string name, ApiRequestMethod apiReques
96101
/// Auto bind property
97102
/// </summary>
98103
/// <param name="category">Category (platform type), used for grouping when outputting API Url</param>
99-
/// <param name="name">Unique name within the platform (if using PlatformType.General, please use a globally unique name)</param>
104+
/// <param name="name">Unique name within the platform (if using PlatformType.General, please use a globally unique name). If input empty string, default value is "ClassTypeName.MethodName"</param>
100105
/// <param name="apiRequestMethod">Current API request type, if null, the globally defined type of this engine will be used</param>
101106
/// <param name="baseApiControllerType">Base class of ApiController, default is ControllerBase</param>
102107
/// <param name="baseApiControllerOrder">Base class order of ApiController, the one with the largest number will be used last (supports negative numbers)</param>
@@ -134,10 +139,39 @@ public string GetCategoryName(MethodInfo methodInfo)
134139
/// </summary>
135140
/// <param name="methodInfo">Current method name</param>
136141
/// <returns></returns>
137-
public string GetName(MethodInfo methodInfo)
142+
public string GetApiBindAttrName(MethodInfo methodInfo)
138143
{
139144
return Name ?? $"{methodInfo.DeclaringType.Name}.{methodInfo.Name}";
140145
}
141146

147+
/// <summary>
148+
/// Get globally unique name
149+
/// </summary>
150+
/// <returns></returns>
151+
public string GetGlobalName(MethodInfo methodInfo)
152+
{
153+
var categoryName = GetCategoryName(methodInfo);
154+
var apiBindAttrName = this.GetApiBindAttrName(methodInfo);
155+
return ApiBindAttribute.GetGlobalName(categoryName, apiBindAttrName);
156+
}
157+
158+
159+
/// <summary>
160+
/// Get globally unique name
161+
/// </summary>
162+
/// <param name="category">Category (platform type), used for grouping when outputting API Url</param>
163+
/// <param name="apiBindAttrName">Common name across assemblies (e.g., CustomApi.SendText)</param>
164+
/// <returns></returns>
165+
public static string GetGlobalName(string category, string apiBindAttrName)
166+
{
167+
Console.WriteLine($"category / apiBindAttrName:{category} /{apiBindAttrName}");
168+
return $"{category}:{apiBindAttrName}";//TODO: Generate globally unique name
169+
}
170+
171+
172+
//public string GetApiPath()
173+
//{
174+
175+
//}
142176
}
143177
}

0 commit comments

Comments
 (0)