diff --git a/src/JT809.Protocol.Extensions.DependencyInjection.Test/JT809.Protocol.Extensions.DependencyInjection.Test.csproj b/src/JT809.Protocol.Extensions.DependencyInjection.Test/JT809.Protocol.Extensions.DependencyInjection.Test.csproj new file mode 100644 index 0000000..87d789f --- /dev/null +++ b/src/JT809.Protocol.Extensions.DependencyInjection.Test/JT809.Protocol.Extensions.DependencyInjection.Test.csproj @@ -0,0 +1,27 @@ + + + + Exe + netcoreapp2.1 + 7.3 + + + + + + + + + + + + + + + + + Always + + + + diff --git a/src/JT809.Protocol.Extensions.DependencyInjection.Test/Program.cs b/src/JT809.Protocol.Extensions.DependencyInjection.Test/Program.cs new file mode 100644 index 0000000..63b1994 --- /dev/null +++ b/src/JT809.Protocol.Extensions.DependencyInjection.Test/Program.cs @@ -0,0 +1,27 @@ +using JT809.Protocol.Extensions.DependencyInjection.Options; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System; +using System.Threading.Tasks; + +namespace JT809.Protocol.Extensions.DependencyInjection.Test +{ + class Program + { + static async Task Main(string[] args) + { + var serverHostBuilder = new HostBuilder() + .ConfigureAppConfiguration((hostingContext, config) => + { + config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); + config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); + }) + .ConfigureServices((hostContext, services) => + { + services.AddJT809Configure(hostContext.Configuration.GetSection("JT809Options")); + }); + await serverHostBuilder.RunConsoleAsync(); + } + } +} diff --git a/src/JT809.Protocol.Extensions.DependencyInjection.Test/appsettings.json b/src/JT809.Protocol.Extensions.DependencyInjection.Test/appsettings.json new file mode 100644 index 0000000..726373d --- /dev/null +++ b/src/JT809.Protocol.Extensions.DependencyInjection.Test/appsettings.json @@ -0,0 +1,29 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Trace" + } + }, + "Console": { + "LogLevel": { + "Default": "Trace" + } + } + }, + "JT809Options": { + "HeaderOptions": { + "MsgGNSSCENTERID": 20181012, + "EncryptFlag": "None", + "EncryptKey": 9999, + "Version": "1.0.0" + }, + "EncryptOptions": { + "M1": 0, + "IA1": 0, + "IC1": 0, + "Key": 0 + } + } +} diff --git a/src/JT809.Protocol.Extensions.DependencyInjection/DependencyInjectionExtensions.cs b/src/JT809.Protocol.Extensions.DependencyInjection/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..458b219 --- /dev/null +++ b/src/JT809.Protocol.Extensions.DependencyInjection/DependencyInjectionExtensions.cs @@ -0,0 +1,52 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using System; +using System.Collections.Generic; +using System.Text; +using JT809.Protocol.JT809Configs; +using Microsoft.Extensions.Configuration; +using JT809.Protocol.JT809Encrypt; +using JT809.Protocol.Extensions.DependencyInjection.Options; +using Microsoft.Extensions.Options; + +namespace JT809.Protocol.Extensions.DependencyInjection +{ + public static class DependencyInjectionExtensions + { + public static IServiceCollection AddJT809Configure(this IServiceCollection services, IConfiguration configuration) + { + services.Configure(configuration); + ServiceProvider serviceProvider = services.BuildServiceProvider(); + JT809Options options = serviceProvider.GetRequiredService>().Value; + var versions = options.Version.Split(new string []{ "." }, StringSplitOptions.RemoveEmptyEntries); + if (versions.Length == 3) + { + options.HeaderOptions.Version = new JT809Header_Version(byte.Parse(versions[0]), byte.Parse(versions[1]), byte.Parse(versions[2])); + } + else if(versions.Length == 2) + { + options.HeaderOptions.Version = new JT809Header_Version(byte.Parse(versions[0]), byte.Parse(versions[1]),0); + } + else if (versions.Length == 1) + { + options.HeaderOptions.Version = new JT809Header_Version(byte.Parse(versions[0]), 0, 0); + } + JT809GlobalConfig.Instance.SetHeaderOptions(options.HeaderOptions); + JT809GlobalConfig.Instance.SetSkipCRCCode(options.SkipCRCCode); + if (options.HeaderOptions.EncryptFlag == JT809Header_Encrypt.Common) + { + JT809GlobalConfig.Instance.SetEncrypt(new JT809EncryptImpl(options.EncryptOptions)); + } + try + { + var msgSNDistributedImpl = services.BuildServiceProvider().GetRequiredService(); + JT809GlobalConfig.Instance.SetMsgSNDistributed(msgSNDistributedImpl); + } + catch + { + + } + return services; + } + } +} diff --git a/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj b/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj new file mode 100644 index 0000000..cafd451 --- /dev/null +++ b/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj @@ -0,0 +1,15 @@ + + + + netstandard2.0 + + + + + + + + + + + diff --git a/src/JT809.Protocol.Extensions.DependencyInjection/Options/JT809Options.cs b/src/JT809.Protocol.Extensions.DependencyInjection/Options/JT809Options.cs new file mode 100644 index 0000000..faff3dd --- /dev/null +++ b/src/JT809.Protocol.Extensions.DependencyInjection/Options/JT809Options.cs @@ -0,0 +1,23 @@ +using JT809.Protocol.JT809Configs; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.Extensions.DependencyInjection.Options +{ + public class JT809Options + { + public JT809EncryptOptions EncryptOptions { get; set; } + public JT809HeaderOptions HeaderOptions { get; set; } + /// + /// 版本号: + /// 默认 1.0.0 + /// + public string Version { get; set; } + /// + /// 设置跳过校验码 + /// 场景:测试的时候,可能需要收到改数据,所以测试的时候有用 + /// + public bool SkipCRCCode { get; set; } + } +}