diff --git a/src/BootstrapBlazor.Server/Components/Samples/SocketFactories.razor b/src/BootstrapBlazor.Server/Components/Samples/SocketFactories.razor
index 58b8bfd2760..396614dac02 100644
--- a/src/BootstrapBlazor.Server/Components/Samples/SocketFactories.razor
+++ b/src/BootstrapBlazor.Server/Components/Samples/SocketFactories.razor
@@ -110,3 +110,22 @@ class MockEntity
return new Foo() { Id = data.Span[0], Name = name };
}
}
+
+
针对第三方程序集的数据类型解决方案如下:
+使用
+
+builder.Services.ConfigureSocketDataConverters(options =>
+{
+ options.AddTypeConverter<MockEntity>();
+ options.AddPropertyConverter<MockEntity>(entity => entity.Header, new SocketDataPropertyConverterAttribute()
+ {
+ Offset = 0,
+ Length = 5
+ });
+ options.AddPropertyConverter<MockEntity>(entity => entity.Body, new SocketDataPropertyConverterAttribute()
+ {
+ Offset = 5,
+ Length = 2
+ });
+});
+
diff --git a/src/BootstrapBlazor/Services/TcpSocket/DataConverter/SocketDataConverterCollections.cs b/src/BootstrapBlazor/Services/TcpSocket/DataConverter/SocketDataConverterCollections.cs
index 71891e2a0ab..1651988e988 100644
--- a/src/BootstrapBlazor/Services/TcpSocket/DataConverter/SocketDataConverterCollections.cs
+++ b/src/BootstrapBlazor/Services/TcpSocket/DataConverter/SocketDataConverterCollections.cs
@@ -10,35 +10,41 @@
namespace BootstrapBlazor.Components;
///
-///
+/// 数据转换器集合类
///
-public class SocketDataConverterCollections
+public sealed class SocketDataConverterCollections
{
readonly ConcurrentDictionary _converters = new();
readonly ConcurrentDictionary _propertyConverters = new();
///
- /// 增加数据类型转换器方法
+ /// 增加指定 数据类型转换器方法
///
///
///
- public void AddOrUpdateTypeConverter(ISocketDataConverter converter)
+ public void AddTypeConverter(ISocketDataConverter converter)
{
var type = typeof(TEntity);
_converters.AddOrUpdate(type, t => converter, (t, v) => converter);
}
+ ///
+ /// 增加默认数据类型转换器方法 转换器使用
+ ///
+ ///
+ public void AddTypeConverter() => AddTypeConverter(new SocketDataConverter(this));
+
///
/// 添加属性类型转化器方法
///
///
///
///
- public void AddOrUpdatePropertyConverter(Expression> propertyExpression, SocketDataPropertyConverterAttribute attribute)
+ public void AddPropertyConverter(Expression> propertyExpression, SocketDataPropertyConverterAttribute attribute)
{
if (propertyExpression.Body is MemberExpression memberExpression)
{
- if(attribute.Type == null)
+ if (attribute.Type == null)
{
attribute.Type = memberExpression.Type;
}
diff --git a/src/BootstrapBlazor/Services/TcpSocket/PropertyConverter/SocketDataPropertyConverterAttribute.cs b/src/BootstrapBlazor/Services/TcpSocket/DataConverter/SocketDataPropertyConverterAttribute.cs
similarity index 100%
rename from src/BootstrapBlazor/Services/TcpSocket/PropertyConverter/SocketDataPropertyConverterAttribute.cs
rename to src/BootstrapBlazor/Services/TcpSocket/DataConverter/SocketDataPropertyConverterAttribute.cs
diff --git a/test/UnitTest/Services/SocketDataConverterCollectionsTest.cs b/test/UnitTest/Services/SocketDataConverterCollectionsTest.cs
index 5f923af1014..db2fe233a09 100644
--- a/test/UnitTest/Services/SocketDataConverterCollectionsTest.cs
+++ b/test/UnitTest/Services/SocketDataConverterCollectionsTest.cs
@@ -16,21 +16,21 @@ protected override void ConfigureConfiguration(IServiceCollection services)
services.ConfigureSocketDataConverters(options =>
{
- options.AddOrUpdateTypeConverter(new SocketDataConverter());
- options.AddOrUpdatePropertyConverter(entity => entity.Header, new SocketDataPropertyConverterAttribute()
+ options.AddTypeConverter();
+ options.AddPropertyConverter(entity => entity.Header, new SocketDataPropertyConverterAttribute()
{
Offset = 0,
Length = 5
});
- options.AddOrUpdatePropertyConverter(entity => entity.Body, new SocketDataPropertyConverterAttribute()
+ options.AddPropertyConverter(entity => entity.Body, new SocketDataPropertyConverterAttribute()
{
Offset = 5,
Length = 2
});
// 为提高代码覆盖率 重复添加转换器以后面的为准
- options.AddOrUpdateTypeConverter(new SocketDataConverter());
- options.AddOrUpdatePropertyConverter(entity => entity.Header, new SocketDataPropertyConverterAttribute()
+ options.AddTypeConverter();
+ options.AddPropertyConverter(entity => entity.Header, new SocketDataPropertyConverterAttribute()
{
Offset = 0,
Length = 5
diff --git a/test/UnitTest/Services/TcpSocketFactoryTest.cs b/test/UnitTest/Services/TcpSocketFactoryTest.cs
index 93e36e8c55c..443a0820b3c 100644
--- a/test/UnitTest/Services/TcpSocketFactoryTest.cs
+++ b/test/UnitTest/Services/TcpSocketFactoryTest.cs
@@ -770,13 +770,13 @@ public async Task TryGetTypeConverter_Ok()
{
builder.ConfigureSocketDataConverters(options =>
{
- options.AddOrUpdateTypeConverter(new SocketDataConverter(options));
- options.AddOrUpdatePropertyConverter(entity => entity.Header, new SocketDataPropertyConverterAttribute()
+ options.AddTypeConverter();
+ options.AddPropertyConverter(entity => entity.Header, new SocketDataPropertyConverterAttribute()
{
Offset = 0,
Length = 5
});
- options.AddOrUpdatePropertyConverter(entity => entity.Body, new SocketDataPropertyConverterAttribute()
+ options.AddPropertyConverter(entity => entity.Body, new SocketDataPropertyConverterAttribute()
{
Offset = 5,
Length = 2