diff --git a/JiShe.CollectBus.Console/Extensions/DependencyInjections/DependencyInjectionExtensions.cs b/JiShe.CollectBus.Console/Extensions/DependencyInjections/DependencyInjectionExtensions.cs index 6fffdb6..cec77dc 100644 --- a/JiShe.CollectBus.Console/Extensions/DependencyInjections/DependencyInjectionExtensions.cs +++ b/JiShe.CollectBus.Console/Extensions/DependencyInjections/DependencyInjectionExtensions.cs @@ -1,10 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; +using System.Reflection; +using JiShe.CollectBus.Protocol.Contracts.Attributes; using JiShe.CollectBus.Protocol.Contracts.DependencyInjection; using TouchSocket.Core; @@ -24,37 +19,45 @@ namespace Microsoft.Extensions.DependencyInjection var allTypes = assembly.GetTypes(); foreach (var type in allTypes) { - if (typeof(ITransientDependency).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract) + if (typeof(ITransientDependency).IsAssignableFrom(type) && type is { IsClass: true, IsAbstract: false }) { - var interfaceTypes = type.GetInterfaces().Where(p => p.FullName != null && !p.FullName.Contains("ITransientDependency")); foreach (var interfaceType in interfaceTypes) { - services.AddTransient(interfaceType, type); + var attr = type.GetCustomAttribute(); + if (attr == null) continue; + var serviceDescriptor = new ServiceDescriptor(interfaceType, attr.Name, type, ServiceLifetime.Transient); + services.Add(serviceDescriptor); } } } foreach (var type in allTypes) { - if (typeof(ISingletonDependency).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract) + if (typeof(ISingletonDependency).IsAssignableFrom(type) && type is { IsClass: true, IsAbstract: false }) { var interfaceTypes = type.GetInterfaces().Where(p => p.FullName != null && !p.FullName.Contains("ISingletonDependency")); foreach (var interfaceType in interfaceTypes) { - services.AddSingleton(interfaceType, type); + var attr = type.GetCustomAttribute(); + if (attr == null) continue; + var serviceDescriptor = new ServiceDescriptor(interfaceType, attr.Name, type, ServiceLifetime.Singleton); + services.Add(serviceDescriptor); } } } foreach (var type in allTypes) { - if (typeof(IScopedDependency).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract) + if (typeof(IScopedDependency).IsAssignableFrom(type) && type is { IsClass: true, IsAbstract: false }) { var interfaceTypes = type.GetInterfaces().Where(p => p.FullName != null && !p.FullName.Contains("IScopedDependency")); foreach (var interfaceType in interfaceTypes) { - services.AddScoped(interfaceType, type); + var attr = type.GetCustomAttribute(); + if (attr == null) continue; + var serviceDescriptor = new ServiceDescriptor(interfaceType, attr.Name, type, ServiceLifetime.Scoped); + services.Add(serviceDescriptor); } } } @@ -71,7 +74,7 @@ namespace Microsoft.Extensions.DependencyInjection ServiceRegister(services, assemblies.ToArray()); } - public static IEnumerable GetAssembliesFromFolder(string folderPath) + private static IEnumerable GetAssembliesFromFolder(string folderPath) { var directory = new DirectoryInfo(folderPath); if (!directory.Exists) return Enumerable.Empty(); diff --git a/JiShe.CollectBus.Console/Extensions/ServiceCollections/ServiceCollectionExtensions.cs b/JiShe.CollectBus.Console/Extensions/ServiceCollections/ServiceCollectionExtensions.cs index 4d4b82f..6ca9238 100644 --- a/JiShe.CollectBus.Console/Extensions/ServiceCollections/ServiceCollectionExtensions.cs +++ b/JiShe.CollectBus.Console/Extensions/ServiceCollections/ServiceCollectionExtensions.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JiShe.CollectBus.Core.Plugins; +using JiShe.CollectBus.Core.Plugins; using JiShe.CollectBus.Core.Services; +using Microsoft.Extensions.Configuration; using TouchSocket.Core; using TouchSocket.Sockets; @@ -15,11 +11,11 @@ namespace Microsoft.Extensions.DependencyInjection /// /// 添加TcpService服务。 /// - public static IServiceCollection AddTcp(this IServiceCollection services) + public static IServiceCollection AddTcp(this IServiceCollection services, IConfiguration configuration) { services.AddTcpService(config => { - config.SetListenIPHosts(10500) + config.SetListenIPHosts(int.Parse(configuration["TCP:Port"] ?? "10500")) .ConfigureContainer(a => //容器的配置顺序应该在最前面 { a.AddConsoleLogger(); //添加一个控制台日志注入(注意:在maui中控制台日志不可用) @@ -46,11 +42,11 @@ namespace Microsoft.Extensions.DependencyInjection /// /// 添加UdpService服务。 /// - public static IServiceCollection AddUdp(this IServiceCollection services) + public static IServiceCollection AddUdp(this IServiceCollection services, IConfiguration configuration) { services.AddUdpSession(config => { - config.SetBindIPHost(10500) + config.SetBindIPHost(int.Parse(configuration["UDP:Port"] ?? "10500")) .ConfigureContainer(a => //容器的配置顺序应该在最前面 { a.AddConsoleLogger(); //添加一个控制台日志注入(注意:在maui中控制台日志不可用) diff --git a/JiShe.CollectBus.Console/JiShe.CollectBus.Console.csproj b/JiShe.CollectBus.Console/JiShe.CollectBus.Console.csproj index 1e49466..bdd95c7 100644 --- a/JiShe.CollectBus.Console/JiShe.CollectBus.Console.csproj +++ b/JiShe.CollectBus.Console/JiShe.CollectBus.Console.csproj @@ -7,6 +7,16 @@ enable + + + + + + + Always + + + @@ -18,4 +28,13 @@ + + + Always + + + Always + + + diff --git a/JiShe.CollectBus.Console/Program.cs b/JiShe.CollectBus.Console/Program.cs index 2318757..8822f43 100644 --- a/JiShe.CollectBus.Console/Program.cs +++ b/JiShe.CollectBus.Console/Program.cs @@ -31,8 +31,8 @@ namespace JiShe.CollectBus.Console var configuration = hostContext.Configuration; services.ServiceRegister(); services.PluginServiceRegister(); - services.AddTcp(); - services.AddUdp(); + services.AddTcp(configuration); + services.AddUdp(configuration); services.AddStackExchangeRedisCache(options => { diff --git a/JiShe.CollectBus.Console/appsettings.json b/JiShe.CollectBus.Console/appsettings.json index d41b49f..d09fdc5 100644 --- a/JiShe.CollectBus.Console/appsettings.json +++ b/JiShe.CollectBus.Console/appsettings.json @@ -1,4 +1,10 @@ { + "TCP": { + "Port": 10500 + }, + "UDP": { + "Port": 10500 + }, "RedisCache": { "ConnectionString": "123456@qwer@localhost:6379", "InstanceName": "CollectBus" diff --git a/JiShe.CollectBus.Protocol.Contracts/Abstracts/BaseProtocolPlugin.cs b/JiShe.CollectBus.Protocol.Contracts/Abstracts/BaseProtocolPlugin.cs index 2ccdb53..fa52834 100644 --- a/JiShe.CollectBus.Protocol.Contracts/Abstracts/BaseProtocolPlugin.cs +++ b/JiShe.CollectBus.Protocol.Contracts/Abstracts/BaseProtocolPlugin.cs @@ -1,7 +1,6 @@ using System; -using System.Collections.Generic; -using System.Text; using JiShe.CollectBus.Protocol.Contracts.Interfaces; +using JiShe.CollectBus.Protocol.Contracts.Models; using Microsoft.Extensions.Caching.Distributed; namespace JiShe.CollectBus.Protocol.Contracts.Abstracts @@ -15,7 +14,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts _cache = cache; } - public abstract Models.Protocol Get(); + public abstract ProtocolInfo Get(); public abstract void Received(); diff --git a/JiShe.CollectBus.Protocol.Contracts/Attributes/ProtocolNameAttribute.cs b/JiShe.CollectBus.Protocol.Contracts/Attributes/ProtocolNameAttribute.cs new file mode 100644 index 0000000..93aa9bf --- /dev/null +++ b/JiShe.CollectBus.Protocol.Contracts/Attributes/ProtocolNameAttribute.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JiShe.CollectBus.Protocol.Contracts.Attributes +{ + [AttributeUsage(AttributeTargets.Class)] + public class ProtocolNameAttribute: Attribute + { + public ProtocolNameAttribute(string name) + { + Name = name; + } + + public string Name { get; set; } + } +} diff --git a/JiShe.CollectBus.Protocol.Contracts/Interfaces/IProtocolPlugin.cs b/JiShe.CollectBus.Protocol.Contracts/Interfaces/IProtocolPlugin.cs index fe54005..0c18e3f 100644 --- a/JiShe.CollectBus.Protocol.Contracts/Interfaces/IProtocolPlugin.cs +++ b/JiShe.CollectBus.Protocol.Contracts/Interfaces/IProtocolPlugin.cs @@ -4,7 +4,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Interfaces { public interface IProtocolPlugin { - Models.Protocol Get(); + ProtocolInfo Get(); void Load(); diff --git a/JiShe.CollectBus.Protocol.Contracts/Models/IProtocol.cs b/JiShe.CollectBus.Protocol.Contracts/Models/IProtocolInfo.cs similarity index 59% rename from JiShe.CollectBus.Protocol.Contracts/Models/IProtocol.cs rename to JiShe.CollectBus.Protocol.Contracts/Models/IProtocolInfo.cs index ba7ac3e..01961ab 100644 --- a/JiShe.CollectBus.Protocol.Contracts/Models/IProtocol.cs +++ b/JiShe.CollectBus.Protocol.Contracts/Models/IProtocolInfo.cs @@ -1,34 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace JiShe.CollectBus.Protocol.Contracts.Models +namespace JiShe.CollectBus.Protocol.Contracts.Models { - public interface IProtocol + public interface IProtocolInfo { /// - /// 协议名称 + /// 协议名称 /// string Name { get; set; } /// - /// 基础协议 376.1/645 + /// 基础协议 376.1/645 /// string BaseProtocol { get; set; } /// - /// 协议类型 TCP/UDP + /// 协议类型 TCP/UDP /// string Type { get; set; } /// - /// 协议备注 + /// 协议备注 /// string Description { get; set; } /// - /// 型号正则匹配 + /// 型号正则匹配 /// string RegularExpression { get; set; } } -} +} \ No newline at end of file diff --git a/JiShe.CollectBus.Protocol.Contracts/Models/Protocol.cs b/JiShe.CollectBus.Protocol.Contracts/Models/ProtocolInfo.cs similarity index 61% rename from JiShe.CollectBus.Protocol.Contracts/Models/Protocol.cs rename to JiShe.CollectBus.Protocol.Contracts/Models/ProtocolInfo.cs index 0abc809..64473bd 100644 --- a/JiShe.CollectBus.Protocol.Contracts/Models/Protocol.cs +++ b/JiShe.CollectBus.Protocol.Contracts/Models/ProtocolInfo.cs @@ -1,12 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace JiShe.CollectBus.Protocol.Contracts.Models +namespace JiShe.CollectBus.Protocol.Contracts.Models { - public class Protocol:IProtocol + public class ProtocolInfo : IProtocolInfo { - public Protocol(string name, string baseProtocol, string type, string description, string regularExpression) + public ProtocolInfo(string name, string baseProtocol, string type, string description, string regularExpression) { Name = name; Type = type; @@ -16,28 +12,28 @@ namespace JiShe.CollectBus.Protocol.Contracts.Models } /// - /// 协议名称 + /// 协议名称 /// public string Name { get; set; } /// - /// 基础协议 376.1/645 + /// 基础协议 376.1/645 /// public string BaseProtocol { get; set; } /// - /// 协议类型 TCP/UDP + /// 协议类型 TCP/UDP /// public string Type { get; set; } /// - /// 协议备注 + /// 协议备注 /// public string Description { get; set; } /// - /// 型号正则匹配 + /// 型号正则匹配 /// public string RegularExpression { get; set; } } -} +} \ No newline at end of file diff --git a/JiShe.CollectBus.Protocol.Test/JiShe.CollectBus.Protocol.Test.csproj b/JiShe.CollectBus.Protocol.Test/JiShe.CollectBus.Protocol.Test.csproj new file mode 100644 index 0000000..f15ccdf --- /dev/null +++ b/JiShe.CollectBus.Protocol.Test/JiShe.CollectBus.Protocol.Test.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + diff --git a/JiShe.CollectBus.Protocol.Test/TestProtocolPlugin.cs b/JiShe.CollectBus.Protocol.Test/TestProtocolPlugin.cs new file mode 100644 index 0000000..c2639c2 --- /dev/null +++ b/JiShe.CollectBus.Protocol.Test/TestProtocolPlugin.cs @@ -0,0 +1,27 @@ +using JiShe.CollectBus.Protocol.Contracts.Abstracts; +using JiShe.CollectBus.Protocol.Contracts.Attributes; +using JiShe.CollectBus.Protocol.Contracts.DependencyInjection; +using JiShe.CollectBus.Protocol.Contracts.Models; +using Microsoft.Extensions.Caching.Distributed; + +namespace JiShe.CollectBus.Protocol.Test +{ + [ProtocolName("StandardProtocol")] + public class TestProtocolPlugin(IDistributedCache cache) : BaseProtocolPlugin(cache), ISingletonDependency + { + public override ProtocolInfo Get() + { + return new ProtocolInfo("Test", "376.1", "TCP", "376.1协议", "DTSU1980"); + } + + public override void Received() + { + throw new NotImplementedException(); + } + + public override void Send() + { + throw new NotImplementedException(); + } + } +} diff --git a/JiShe.CollectBus.Protocol/IStandardProtocolPlugin.cs b/JiShe.CollectBus.Protocol/IStandardProtocolPlugin.cs deleted file mode 100644 index 52a190e..0000000 --- a/JiShe.CollectBus.Protocol/IStandardProtocolPlugin.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace JiShe.CollectBus.Protocol -{ - public interface IStandardProtocolPlugin - { - } -} diff --git a/JiShe.CollectBus.Protocol/JiShe.CollectBus.Protocol.csproj b/JiShe.CollectBus.Protocol/JiShe.CollectBus.Protocol.csproj index c71cea1..e56c90b 100644 --- a/JiShe.CollectBus.Protocol/JiShe.CollectBus.Protocol.csproj +++ b/JiShe.CollectBus.Protocol/JiShe.CollectBus.Protocol.csproj @@ -7,8 +7,16 @@ + + + + + + + + diff --git a/JiShe.CollectBus.Protocol/StandardProtocolPlugin.cs b/JiShe.CollectBus.Protocol/StandardProtocolPlugin.cs index b4acb1a..b0acf7b 100644 --- a/JiShe.CollectBus.Protocol/StandardProtocolPlugin.cs +++ b/JiShe.CollectBus.Protocol/StandardProtocolPlugin.cs @@ -1,18 +1,17 @@ using JiShe.CollectBus.Protocol.Contracts.Abstracts; +using JiShe.CollectBus.Protocol.Contracts.Attributes; using JiShe.CollectBus.Protocol.Contracts.DependencyInjection; +using JiShe.CollectBus.Protocol.Contracts.Models; using Microsoft.Extensions.Caching.Distributed; namespace JiShe.CollectBus.Protocol { - public class StandardProtocolPlugin : BaseProtocolPlugin, IStandardProtocolPlugin,ISingletonDependency + [ProtocolName("StandardProtocol")] + public class StandardProtocolPlugin(IDistributedCache cache) : BaseProtocolPlugin(cache), ISingletonDependency { - public StandardProtocolPlugin(IDistributedCache cache) : base(cache) + public override ProtocolInfo Get() { - } - - public override Contracts.Models.Protocol Get() - { - return new Contracts.Models.Protocol("Standard", "376.1", "TCP","376.1协议","DTS1980"); + return new ProtocolInfo("Standard", "376.1", "TCP","376.1协议","DTS1980"); } public void Load() diff --git a/JiShe.CollectBus.sln b/JiShe.CollectBus.sln index 2073a2d..9b3bf6f 100644 --- a/JiShe.CollectBus.sln +++ b/JiShe.CollectBus.sln @@ -3,15 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JiShe.CollectBus.Core", "JiShe.CollectBus.Core\JiShe.CollectBus.Core.csproj", "{F1360C93-5B6B-4E65-9D81-1DA38740F32D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JiShe.CollectBus.Core", "JiShe.CollectBus.Core\JiShe.CollectBus.Core.csproj", "{F1360C93-5B6B-4E65-9D81-1DA38740F32D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JiShe.CollectBus.Console", "JiShe.CollectBus.Console\JiShe.CollectBus.Console.csproj", "{40C4F834-3080-451B-9510-6FE7BC4F801F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JiShe.CollectBus.Console", "JiShe.CollectBus.Console\JiShe.CollectBus.Console.csproj", "{40C4F834-3080-451B-9510-6FE7BC4F801F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JiShe.CollectBus.Protocol", "JiShe.CollectBus.Protocol\JiShe.CollectBus.Protocol.csproj", "{B2C476F1-AE32-419D-BDA2-291FCE639CF6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JiShe.CollectBus.Protocol", "JiShe.CollectBus.Protocol\JiShe.CollectBus.Protocol.csproj", "{B2C476F1-AE32-419D-BDA2-291FCE639CF6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JiShe.CollectBus.Protocol.Contracts", "JiShe.CollectBus.Protocol.Contracts\JiShe.CollectBus.Protocol.Contracts.csproj", "{4468B52D-3AAE-4918-B4D6-E6E8F000825D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JiShe.CollectBus.Protocol.Contracts", "JiShe.CollectBus.Protocol.Contracts\JiShe.CollectBus.Protocol.Contracts.csproj", "{4468B52D-3AAE-4918-B4D6-E6E8F000825D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JiShe.CollectBus.Common", "JiShe.CollectBus.Common\JiShe.CollectBus.Common.csproj", "{1D3A5A4E-B977-4E33-A1AF-62508110C3B7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JiShe.CollectBus.Common", "JiShe.CollectBus.Common\JiShe.CollectBus.Common.csproj", "{1D3A5A4E-B977-4E33-A1AF-62508110C3B7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{3A04FB29-EA75-4499-BBF3-AF24C7D46A1D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{C7DEC9FB-3F75-4584-85B0-16EA3CB222E5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JiShe.CollectBus.Protocol.Test", "JiShe.CollectBus.Protocol.Test\JiShe.CollectBus.Protocol.Test.csproj", "{289196B4-FFBE-4E40-A3A1-FCFADBE945ED}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -39,10 +45,22 @@ Global {1D3A5A4E-B977-4E33-A1AF-62508110C3B7}.Debug|Any CPU.Build.0 = Debug|Any CPU {1D3A5A4E-B977-4E33-A1AF-62508110C3B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {1D3A5A4E-B977-4E33-A1AF-62508110C3B7}.Release|Any CPU.Build.0 = Release|Any CPU + {289196B4-FFBE-4E40-A3A1-FCFADBE945ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {289196B4-FFBE-4E40-A3A1-FCFADBE945ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {289196B4-FFBE-4E40-A3A1-FCFADBE945ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {289196B4-FFBE-4E40-A3A1-FCFADBE945ED}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F1360C93-5B6B-4E65-9D81-1DA38740F32D} = {C7DEC9FB-3F75-4584-85B0-16EA3CB222E5} + {40C4F834-3080-451B-9510-6FE7BC4F801F} = {C7DEC9FB-3F75-4584-85B0-16EA3CB222E5} + {B2C476F1-AE32-419D-BDA2-291FCE639CF6} = {C7DEC9FB-3F75-4584-85B0-16EA3CB222E5} + {4468B52D-3AAE-4918-B4D6-E6E8F000825D} = {C7DEC9FB-3F75-4584-85B0-16EA3CB222E5} + {1D3A5A4E-B977-4E33-A1AF-62508110C3B7} = {C7DEC9FB-3F75-4584-85B0-16EA3CB222E5} + {289196B4-FFBE-4E40-A3A1-FCFADBE945ED} = {3A04FB29-EA75-4499-BBF3-AF24C7D46A1D} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {33261859-9CD1-4A43-B181-AB75C247D1CD} EndGlobalSection