Skip to content

Commit 9769050

Browse files
committed
Refator RequestContext and Extensions and Sample
1 parent 1410844 commit 9769050

File tree

7 files changed

+76
-199
lines changed

7 files changed

+76
-199
lines changed

src/Cuiliang.AliyunOssSdk.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
<ItemGroup>
1515
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.1.1" />
1616
<PackageReference Include="Microsoft.Extensions.Http" Version="2.1.1" />
17+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.1" />
1718
</ItemGroup>
1819
</Project>

src/Entites/OssCredential.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using Microsoft.Extensions.Options;
2+
using System;
23
using System.Collections.Generic;
34
using System.Linq;
45
using System.Threading.Tasks;
@@ -8,7 +9,7 @@ namespace Cuiliang.AliyunOssSdk.Entites
89
/// <summary>
910
/// Oss访问安全凭据
1011
/// </summary>
11-
public class OssCredential
12+
public class OssCredential : IOptions<OssCredential>
1213
{
1314
public string AccessKeyId { get; set; }
1415
public string AccessKeySecret { get; set; }
@@ -24,5 +25,6 @@ public bool UseToken {
2425
/// 令牌
2526
/// </summary>
2627
public string SecurityToken { get; set; }
28+
public OssCredential Value => this;
2729
}
2830
}

src/OssClientServiceCollectionExtensions.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,39 @@
11
using System;
2+
using System.Net.Http;
23
using Cuiliang.AliyunOssSdk;
34
using Cuiliang.AliyunOssSdk.Api.Bucket.List;
45
using Cuiliang.AliyunOssSdk.Entites;
56
using Cuiliang.AliyunOssSdk.Request;
67
using Microsoft.Extensions.Configuration;
78
using Microsoft.Extensions.DependencyInjection;
89

9-
namespace Cuiliang.AliyunOssSdk
10+
namespace Microsoft.Extensions.DependencyInjection
1011
{
1112
public static class OssClientServiceCollectionExtensions
1213
{
1314
public static IServiceCollection AddOssClient(
1415
this IServiceCollection services,
15-
IConfigurationSection ossClientConf,
16-
ClientConfiguration config = null)
16+
IConfiguration configuration,
17+
string sectionName = "ossClient",
18+
Action<ClientConfiguration> setupClientConfiguration = null,
19+
Action<HttpClient> configureHttpClient = null)
1720
{
18-
var credential = new OssCredential();
19-
ossClientConf.Bind(credential);
21+
services.Configure<OssCredential>(configuration.GetSection("ossClient"));
2022

21-
var requestContext = new RequestContext(credential, config ?? ClientConfiguration.Default);
23+
var clientConfiguration = new ClientConfiguration();
24+
setupClientConfiguration?.Invoke(clientConfiguration);
25+
services.AddSingleton(clientConfiguration);
2226

23-
services.AddSingleton<RequestContext>(requestContext);
24-
services.AddHttpClient<OssClient>();
27+
services.AddTransient<RequestContext>();
28+
29+
if (configureHttpClient == null)
30+
{
31+
services.AddHttpClient<OssClient>();
32+
}
33+
else
34+
{
35+
services.AddHttpClient<OssClient>(configureHttpClient);
36+
}
2537

2638
return services;
2739
}

src/Request/RequestContext.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using System.Threading.Tasks;
55
using Cuiliang.AliyunOssSdk.Entites;
6+
using Microsoft.Extensions.Options;
67

78
namespace Cuiliang.AliyunOssSdk.Request
89
{
@@ -11,9 +12,9 @@ namespace Cuiliang.AliyunOssSdk.Request
1112
/// </summary>
1213
public class RequestContext
1314
{
14-
public RequestContext(OssCredential credential, ClientConfiguration config)
15+
public RequestContext(IOptions<OssCredential> credentialOptions, ClientConfiguration config)
1516
{
16-
OssCredential = credential;
17+
OssCredential = credentialOptions.Value;
1718
ClientConfiguration = config;
1819
}
1920
/// <summary>

tests/Sample/NewSdkTester.cs

Lines changed: 0 additions & 171 deletions
This file was deleted.

tests/Sample/Program.cs

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,57 @@
11
using System;
2+
using System.IO;
23
using System.Threading.Tasks;
3-
using Sample;
4+
using Cuiliang.AliyunOssSdk;
5+
using Cuiliang.AliyunOssSdk.Entites;
6+
using Cuiliang.AliyunOssSdk.Request;
7+
using Microsoft.Extensions.Configuration;
8+
using Microsoft.Extensions.DependencyInjection;
49

510
class Program
611
{
7-
public static void Main(string[] args)
12+
public static async Task Main(string[] args)
813
{
9-
MainAsync(args).GetAwaiter().GetResult();
10-
11-
Console.ReadKey();
12-
}
13-
14-
public static async Task MainAsync(string[] args)
15-
{
16-
try
17-
{
18-
await NewSdkTester.RunAsync();
19-
}
20-
catch (Exception ex)
14+
if (args.Length < 2)
2115
{
22-
Console.WriteLine("Ex:" + ex.Message);
23-
throw;
16+
Console.WriteLine("Please run with bucket name and file path");
17+
return;
2418
}
2519

20+
var bucketName = args[0];
21+
var filePath = args[1];
2622

23+
var conf = new ConfigurationBuilder()
24+
.SetBasePath(Directory.GetCurrentDirectory())
25+
.AddJsonFile("appsettings.json", true, true)
26+
.AddJsonFile("appsettings.Development.json", true, true)
27+
.Build();
28+
29+
IServiceCollection services = new ServiceCollection();
30+
services.AddOssClient(conf);
31+
var sp = services.BuildServiceProvider();
32+
var client = sp.GetService<OssClient>();
33+
34+
var bucket = BucketInfo.CreateByRegion(OssRegions.HangZhou, bucketName, false, false);
35+
var remoteFilePaht = $"test/{DateTime.Now.ToString("yyyyMMddHHmmss")}.png";
36+
using (var fs = new FileStream(filePath, FileMode.Open))
37+
{
38+
var file = new RequestContent()
39+
{
40+
MimeType = "images/png",
41+
ContentType = RequestContentType.Stream,
42+
StreamContent = fs,
43+
};
44+
45+
var result = await client.PutObjectAsync(bucket, remoteFilePaht, file);
46+
if(result.IsSuccess)
47+
{
48+
Console.WriteLine("Succeeded!");
49+
}
50+
else
51+
{
52+
Console.WriteLine("Failed!");
53+
Console.WriteLine(result.ErrorMessage);
54+
}
55+
}
2756
}
2857
}

tests/Sample/Sample.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<OutputType>Exe</OutputType>
44
<TargetFramework>netcoreapp2.0</TargetFramework>
55
</PropertyGroup>
6+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
7+
<LangVersion>latest</LangVersion>
8+
</PropertyGroup>
69
<ItemGroup>
710
<ProjectReference Include="..\..\src\Cuiliang.AliyunOssSdk.csproj" />
811
</ItemGroup>

0 commit comments

Comments
 (0)