Skip to content

Commit 7a52f69

Browse files
committed
merge: 合并代码
2 parents 0a9f2f2 + 86b9118 commit 7a52f69

File tree

107 files changed

+3174
-602
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+3174
-602
lines changed

Bing.All.sln

Lines changed: 44 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -228,15 +228,19 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Test.Shared", "framewo
228228
EndProject
229229
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Ddd.Domain.Tests", "framework\tests\Bing.Ddd.Domain.Tests\Bing.Ddd.Domain.Tests.csproj", "{8B581529-D7D2-4DCF-824A-2AAFB58F8C94}"
230230
EndProject
231-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging", "framework\src\Bing.Logging\Bing.Logging.csproj", "{ECB340A3-A21C-460D-8EBC-09EA5FB8731C}"
231+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.EventBus", "framework\src\Bing.EventBus\Bing.EventBus.csproj", "{5E8AD211-7AEF-4D9D-AFA8-C85B6F3D7C6A}"
232232
EndProject
233-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging.Sinks.Exceptionless", "framework\src\Bing.Logging.Sinks.Exceptionless\Bing.Logging.Sinks.Exceptionless.csproj", "{04EB5533-6885-4292-BED1-4D06A5E162D1}"
233+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.EventBus.Tests", "framework\tests\Bing.EventBus.Tests\Bing.EventBus.Tests.csproj", "{0A5D1639-8EEE-4BC9-94A5-04F354FEFBFD}"
234234
EndProject
235-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging.Serilog", "framework\src\Bing.Logging.Serilog\Bing.Logging.Serilog.csproj", "{9E817B3A-BA88-42A4-A7D7-C4C935889BC5}"
235+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging", "framework\src\Bing.Logging\Bing.Logging.csproj", "{427DC057-A61A-4D4A-9B20-30F11367AFC8}"
236236
EndProject
237-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bing.Logging.Tests", "framework\tests\Bing.Logging.Tests\Bing.Logging.Tests.csproj", "{3DDB338B-8212-4D81-858D-FEF355960773}"
237+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging.Serilog", "framework\src\Bing.Logging.Serilog\Bing.Logging.Serilog.csproj", "{C935C3C7-0CEB-4583-9039-114631C38989}"
238238
EndProject
239-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bing.Logging.Serilog.Tests", "framework\tests\Bing.Logging.Serilog.Tests\Bing.Logging.Serilog.Tests.csproj", "{C572A0EF-5A1C-46DE-8465-AD6A0672F55A}"
239+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging.Sinks.Exceptionless", "framework\src\Bing.Logging.Sinks.Exceptionless\Bing.Logging.Sinks.Exceptionless.csproj", "{C7E17279-AAEB-4A58-BBBB-AF443F924D9E}"
240+
EndProject
241+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging.Tests", "framework\tests\Bing.Logging.Tests\Bing.Logging.Tests.csproj", "{73871EF9-9CF6-479F-BC1C-AD443CE037AE}"
242+
EndProject
243+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bing.Logging.Serilog.Tests", "framework\tests\Bing.Logging.Serilog.Tests\Bing.Logging.Serilog.Tests.csproj", "{857BF156-74BE-4D71-8814-A1ECAA958C2D}"
240244
EndProject
241245
Global
242246
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -520,26 +524,34 @@ Global
520524
{8B581529-D7D2-4DCF-824A-2AAFB58F8C94}.Debug|Any CPU.Build.0 = Debug|Any CPU
521525
{8B581529-D7D2-4DCF-824A-2AAFB58F8C94}.Release|Any CPU.ActiveCfg = Release|Any CPU
522526
{8B581529-D7D2-4DCF-824A-2AAFB58F8C94}.Release|Any CPU.Build.0 = Release|Any CPU
523-
{ECB340A3-A21C-460D-8EBC-09EA5FB8731C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
524-
{ECB340A3-A21C-460D-8EBC-09EA5FB8731C}.Debug|Any CPU.Build.0 = Debug|Any CPU
525-
{ECB340A3-A21C-460D-8EBC-09EA5FB8731C}.Release|Any CPU.ActiveCfg = Release|Any CPU
526-
{ECB340A3-A21C-460D-8EBC-09EA5FB8731C}.Release|Any CPU.Build.0 = Release|Any CPU
527-
{04EB5533-6885-4292-BED1-4D06A5E162D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
528-
{04EB5533-6885-4292-BED1-4D06A5E162D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
529-
{04EB5533-6885-4292-BED1-4D06A5E162D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
530-
{04EB5533-6885-4292-BED1-4D06A5E162D1}.Release|Any CPU.Build.0 = Release|Any CPU
531-
{9E817B3A-BA88-42A4-A7D7-C4C935889BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
532-
{9E817B3A-BA88-42A4-A7D7-C4C935889BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
533-
{9E817B3A-BA88-42A4-A7D7-C4C935889BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
534-
{9E817B3A-BA88-42A4-A7D7-C4C935889BC5}.Release|Any CPU.Build.0 = Release|Any CPU
535-
{3DDB338B-8212-4D81-858D-FEF355960773}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
536-
{3DDB338B-8212-4D81-858D-FEF355960773}.Debug|Any CPU.Build.0 = Debug|Any CPU
537-
{3DDB338B-8212-4D81-858D-FEF355960773}.Release|Any CPU.ActiveCfg = Release|Any CPU
538-
{3DDB338B-8212-4D81-858D-FEF355960773}.Release|Any CPU.Build.0 = Release|Any CPU
539-
{C572A0EF-5A1C-46DE-8465-AD6A0672F55A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
540-
{C572A0EF-5A1C-46DE-8465-AD6A0672F55A}.Debug|Any CPU.Build.0 = Debug|Any CPU
541-
{C572A0EF-5A1C-46DE-8465-AD6A0672F55A}.Release|Any CPU.ActiveCfg = Release|Any CPU
542-
{C572A0EF-5A1C-46DE-8465-AD6A0672F55A}.Release|Any CPU.Build.0 = Release|Any CPU
527+
{5E8AD211-7AEF-4D9D-AFA8-C85B6F3D7C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
528+
{5E8AD211-7AEF-4D9D-AFA8-C85B6F3D7C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
529+
{5E8AD211-7AEF-4D9D-AFA8-C85B6F3D7C6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
530+
{5E8AD211-7AEF-4D9D-AFA8-C85B6F3D7C6A}.Release|Any CPU.Build.0 = Release|Any CPU
531+
{0A5D1639-8EEE-4BC9-94A5-04F354FEFBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
532+
{0A5D1639-8EEE-4BC9-94A5-04F354FEFBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
533+
{0A5D1639-8EEE-4BC9-94A5-04F354FEFBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
534+
{0A5D1639-8EEE-4BC9-94A5-04F354FEFBFD}.Release|Any CPU.Build.0 = Release|Any CPU
535+
{427DC057-A61A-4D4A-9B20-30F11367AFC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
536+
{427DC057-A61A-4D4A-9B20-30F11367AFC8}.Debug|Any CPU.Build.0 = Debug|Any CPU
537+
{427DC057-A61A-4D4A-9B20-30F11367AFC8}.Release|Any CPU.ActiveCfg = Release|Any CPU
538+
{427DC057-A61A-4D4A-9B20-30F11367AFC8}.Release|Any CPU.Build.0 = Release|Any CPU
539+
{C935C3C7-0CEB-4583-9039-114631C38989}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
540+
{C935C3C7-0CEB-4583-9039-114631C38989}.Debug|Any CPU.Build.0 = Debug|Any CPU
541+
{C935C3C7-0CEB-4583-9039-114631C38989}.Release|Any CPU.ActiveCfg = Release|Any CPU
542+
{C935C3C7-0CEB-4583-9039-114631C38989}.Release|Any CPU.Build.0 = Release|Any CPU
543+
{C7E17279-AAEB-4A58-BBBB-AF443F924D9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
544+
{C7E17279-AAEB-4A58-BBBB-AF443F924D9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
545+
{C7E17279-AAEB-4A58-BBBB-AF443F924D9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
546+
{C7E17279-AAEB-4A58-BBBB-AF443F924D9E}.Release|Any CPU.Build.0 = Release|Any CPU
547+
{73871EF9-9CF6-479F-BC1C-AD443CE037AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
548+
{73871EF9-9CF6-479F-BC1C-AD443CE037AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
549+
{73871EF9-9CF6-479F-BC1C-AD443CE037AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
550+
{73871EF9-9CF6-479F-BC1C-AD443CE037AE}.Release|Any CPU.Build.0 = Release|Any CPU
551+
{857BF156-74BE-4D71-8814-A1ECAA958C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
552+
{857BF156-74BE-4D71-8814-A1ECAA958C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
553+
{857BF156-74BE-4D71-8814-A1ECAA958C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
554+
{857BF156-74BE-4D71-8814-A1ECAA958C2D}.Release|Any CPU.Build.0 = Release|Any CPU
543555
EndGlobalSection
544556
GlobalSection(SolutionProperties) = preSolution
545557
HideSolutionNode = FALSE
@@ -640,11 +652,13 @@ Global
640652
{65B439C9-4B54-4DB8-86B3-9EBE8E62DF83} = {09A94120-CE45-402F-B45A-21DF04F0C226}
641653
{D6C96AE5-8756-4278-A331-43073E08C3ED} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
642654
{8B581529-D7D2-4DCF-824A-2AAFB58F8C94} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
643-
{ECB340A3-A21C-460D-8EBC-09EA5FB8731C} = {33F6CAB3-FD8A-4B91-9B94-A1E2DBC2759B}
644-
{04EB5533-6885-4292-BED1-4D06A5E162D1} = {33F6CAB3-FD8A-4B91-9B94-A1E2DBC2759B}
645-
{9E817B3A-BA88-42A4-A7D7-C4C935889BC5} = {33F6CAB3-FD8A-4B91-9B94-A1E2DBC2759B}
646-
{3DDB338B-8212-4D81-858D-FEF355960773} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
647-
{C572A0EF-5A1C-46DE-8465-AD6A0672F55A} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
655+
{5E8AD211-7AEF-4D9D-AFA8-C85B6F3D7C6A} = {B5285F1C-479F-43F5-B3DE-3E930516AF6D}
656+
{0A5D1639-8EEE-4BC9-94A5-04F354FEFBFD} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
657+
{427DC057-A61A-4D4A-9B20-30F11367AFC8} = {33F6CAB3-FD8A-4B91-9B94-A1E2DBC2759B}
658+
{C935C3C7-0CEB-4583-9039-114631C38989} = {33F6CAB3-FD8A-4B91-9B94-A1E2DBC2759B}
659+
{C7E17279-AAEB-4A58-BBBB-AF443F924D9E} = {33F6CAB3-FD8A-4B91-9B94-A1E2DBC2759B}
660+
{73871EF9-9CF6-479F-BC1C-AD443CE037AE} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
661+
{857BF156-74BE-4D71-8814-A1ECAA958C2D} = {5C7976B4-C243-41B9-8303-8E8FAE099D31}
648662
EndGlobalSection
649663
GlobalSection(ExtensibilityGlobals) = postSolution
650664
SolutionGuid = {C1202A0F-83CC-4602-BCE5-20CB640BCAD4}

framework/src/Bing.AspNetCore.Mvc.UI/Bing/AspNetCore/Mvc/UI/RazorPages/DefaultRazorHtmlGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Threading.Tasks;
44
using Bing.DependencyInjection;
55
using Bing.Extensions;
6-
using Bing.Helpers;
6+
using Bing.IO;
77
using Bing.Logs;
88
using Microsoft.AspNetCore.Http;
99
using Microsoft.AspNetCore.Mvc;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Bing.AspNetCore.ExceptionHandling
2+
{
3+
/// <summary>
4+
/// 授权异常处理器选项配置
5+
/// </summary>
6+
public class BingAuthorizationExceptionHandlerOptions
7+
{
8+
/// <summary>
9+
/// 认证方案
10+
/// </summary>
11+
public string AuthenticationScheme { get; set; }
12+
}
13+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using System.Threading.Tasks;
2+
using Bing.Authorization;
3+
using Bing.DependencyInjection;
4+
using Bing.Exceptions;
5+
using Bing.Text;
6+
using Microsoft.AspNetCore.Authentication;
7+
using Microsoft.AspNetCore.Http;
8+
using Microsoft.Extensions.DependencyInjection;
9+
using Microsoft.Extensions.Options;
10+
11+
namespace Bing.AspNetCore.ExceptionHandling
12+
{
13+
/// <summary>
14+
/// 授权异常处理器
15+
/// </summary>
16+
public class DefaultBingAuthorizationExceptionHandler : IBingAuthorizationExceptionHandler, ITransientDependency
17+
{
18+
/// <summary>
19+
/// 处理
20+
/// </summary>
21+
/// <param name="exception">授权异常</param>
22+
/// <param name="httpContext">Http上下文</param>
23+
public virtual async Task HandleAsync(BingAuthorizationException exception, HttpContext httpContext)
24+
{
25+
var handlerOptions = httpContext.RequestServices
26+
.GetRequiredService<IOptions<BingAuthorizationExceptionHandlerOptions>>().Value;
27+
var isAuthenticated = httpContext.User.Identity?.IsAuthenticated ?? false;
28+
var authenticationSchemeProvider =
29+
httpContext.RequestServices.GetRequiredService<IAuthenticationSchemeProvider>();
30+
31+
AuthenticationScheme scheme = null;
32+
if (!handlerOptions.AuthenticationScheme.IsNullOrWhiteSpace())
33+
{
34+
scheme = await authenticationSchemeProvider.GetSchemeAsync(handlerOptions.AuthenticationScheme);
35+
if (scheme == null)
36+
throw new Warning($"No authentication scheme named {handlerOptions.AuthenticationScheme} was found.");
37+
}
38+
else
39+
{
40+
if (isAuthenticated)
41+
{
42+
scheme = await authenticationSchemeProvider.GetDefaultForbidSchemeAsync();
43+
if (scheme == null)
44+
throw new Warning($"There was no DefaultForbidScheme found.");
45+
}
46+
else
47+
{
48+
scheme = await authenticationSchemeProvider.GetDefaultChallengeSchemeAsync();
49+
if (scheme == null)
50+
throw new Warning($"There was no DefaultForbidScheme found.");
51+
}
52+
}
53+
54+
var handlers = httpContext.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>();
55+
var handler = await handlers.GetHandlerAsync(httpContext, scheme.Name);
56+
if (handler == null)
57+
throw new Warning($"No handler of {scheme.Name} was found.");
58+
if (isAuthenticated)
59+
await handler.ForbidAsync(null);
60+
else
61+
await handler.ChallengeAsync(null);
62+
}
63+
}
64+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using System.Threading.Tasks;
5+
using Bing.Authorization;
6+
using Microsoft.AspNetCore.Http;
7+
8+
namespace Bing.AspNetCore.ExceptionHandling
9+
{
10+
/// <summary>
11+
/// 授权异常处理器
12+
/// </summary>
13+
public interface IBingAuthorizationExceptionHandler
14+
{
15+
/// <summary>
16+
/// 处理
17+
/// </summary>
18+
/// <param name="exception">授权异常</param>
19+
/// <param name="httpContext">Http上下文</param>
20+
Task HandleAsync(BingAuthorizationException exception, HttpContext httpContext);
21+
}
22+
}

framework/src/Bing.AspNetCore/Bing/AspNetCore/Extensions/Extensions.ServiceCollection.cs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Bing.AspNetCore.Mvc;
22
using Bing.AspNetCore.Uploads;
3-
using Microsoft.AspNetCore.Hosting;
43
using Microsoft.Extensions.DependencyInjection;
54
using Microsoft.Extensions.DependencyInjection.Extensions;
65

@@ -37,20 +36,5 @@ public static class BingServiceCollectionExtensions
3736
/// <param name="services">服务集合</param>
3837
public static void AddApiInterfaceService<TApiInterfaceService>(this IServiceCollection services) where TApiInterfaceService : class, IApiInterfaceService =>
3938
services.TryAddSingleton<IApiInterfaceService, TApiInterfaceService>();
40-
41-
#if NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0
42-
/// <summary>
43-
/// 获取<see cref="IWebHostEnvironment"/>环境信息
44-
/// </summary>
45-
/// <param name="services">服务集合</param>
46-
public static IWebHostEnvironment GetWebHostEnvironment(this IServiceCollection services) => services.GetSingletonInstance<IWebHostEnvironment>();
47-
#elif NETSTANDARD2_0
48-
/// <summary>
49-
/// 获取<see cref="IHostingEnvironment"/>环境信息
50-
/// </summary>
51-
/// <param name="services">服务集合</param>
52-
public static IHostingEnvironment GetHostingEnvironment(this IServiceCollection services) => services.GetSingletonInstance<IHostingEnvironment>();
53-
#endif
54-
5539
}
5640
}

framework/src/Bing.AspNetCore/Bing/AspNetCore/Security/Claims/BingClaimsMapMiddleware.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ public class BingClaimsMapMiddleware : IMiddleware
2222
/// 初始化一个<see cref="BingClaimsMapMiddleware"/>类型的实例
2323
/// </summary>
2424
/// <param name="next">方法</param>
25-
public BingClaimsMapMiddleware(RequestDelegate next)
26-
{
27-
_next = next;
28-
}
25+
public BingClaimsMapMiddleware(RequestDelegate next) => _next = next;
2926

3027
/// <summary>
3128
/// 执行中间件拦截逻辑

framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/BingCorrelationIdMiddleware.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public async Task InvokeAsync(HttpContext context)
4646
{
4747
var correlationId = _correlationIdProvider.Get();
4848
TraceIdContext.Current ??= new TraceIdContext(correlationId);
49-
CheckAndSetCorrelationIdOnResponse(context, _options, correlationId);
5049
try
5150
{
5251
await _next(context);

framework/src/Bing.AspNetCore/Microsoft/AspNetCore/Http/BingHttpRequestExtensions.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Bing.Helpers;
1+
using System;
2+
using Bing.Helpers;
3+
using Microsoft.Net.Http.Headers;
24

35
namespace Microsoft.AspNetCore.Http
46
{
@@ -10,7 +12,7 @@ public static class BingHttpRequestExtensions
1012
/// <summary>
1113
/// 请求头:X-Requested-With
1214
/// </summary>
13-
private const string RequestedWithHeader = "X-Requested-With";
15+
private const string XRequestedWith = "X-Requested-With";
1416

1517
/// <summary>
1618
/// 请求头值:XMLHttpRequest
@@ -26,7 +28,8 @@ public static bool IsAjax(this HttpRequest request)
2628
Check.NotNull(request, nameof(request));
2729
if (request.Headers == null)
2830
return false;
29-
return request.Headers[RequestedWithHeader] == XmlHttpRequest;
31+
return string.Equals(request.Query[XRequestedWith], XmlHttpRequest, StringComparison.Ordinal) ||
32+
string.Equals(request.Headers[XRequestedWith], XmlHttpRequest, StringComparison.Ordinal);
3033
}
3134

3235
/// <summary>
@@ -38,7 +41,11 @@ public static bool CanAccept(this HttpRequest request, string contentType)
3841
{
3942
Check.NotNull(request, nameof(request));
4043
Check.NotNull(contentType, nameof(contentType));
41-
return request.Headers["Accept"].ToString().Contains(contentType);
44+
#if NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0
45+
return request.Headers[HeaderNames.Accept].ToString().Contains(contentType, StringComparison.OrdinalIgnoreCase);
46+
#elif NETSTANDARD2_0
47+
return request.Headers[HeaderNames.Accept].ToString().Contains(contentType);
48+
#endif
4249
}
4350
}
4451
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Microsoft.AspNetCore.Hosting;
2+
3+
namespace Microsoft.Extensions.DependencyInjection
4+
{
5+
/// <summary>
6+
/// 服务集合(<see cref="IServiceCollection"/>) 扩展
7+
/// </summary>
8+
public static class BingAspNetCoreServiceCollectionExtensions
9+
{
10+
#if NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0
11+
/// <summary>
12+
/// 获取<see cref="IWebHostEnvironment"/>环境信息
13+
/// </summary>
14+
/// <param name="services">服务集合</param>
15+
public static IWebHostEnvironment GetWebHostEnvironment(this IServiceCollection services) => services.GetSingletonInstance<IWebHostEnvironment>();
16+
#elif NETSTANDARD2_0
17+
/// <summary>
18+
/// 获取<see cref="IHostingEnvironment"/>环境信息
19+
/// </summary>
20+
/// <param name="services">服务集合</param>
21+
public static IHostingEnvironment GetHostingEnvironment(this IServiceCollection services) => services.GetSingletonInstance<IHostingEnvironment>();
22+
#endif
23+
}
24+
}

0 commit comments

Comments
 (0)