Commit cda3f5a8 authored by Savorboard's avatar Savorboard

add DeSerialize method to IContentSerializer with type deseralize

parent f823d7a6
using DotNetCore.CAP.Models; using System;
using DotNetCore.CAP.Models;
namespace DotNetCore.CAP.Abstractions namespace DotNetCore.CAP.Abstractions
{ {
...@@ -7,6 +8,8 @@ namespace DotNetCore.CAP.Abstractions ...@@ -7,6 +8,8 @@ namespace DotNetCore.CAP.Abstractions
string Serialize<T>(T obj); string Serialize<T>(T obj);
T DeSerialize<T>(string content); T DeSerialize<T>(string content);
object DeSerialize(string content, Type type);
} }
public interface IMessagePacker public interface IMessagePacker
......
using System; using System;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using DotNetCore.CAP.Abstractions;
using DotNetCore.CAP.Abstractions.ModelBinding; using DotNetCore.CAP.Abstractions.ModelBinding;
using DotNetCore.CAP.Infrastructure;
namespace DotNetCore.CAP.Internal namespace DotNetCore.CAP.Internal
{ {
public class ComplexTypeModelBinder : IModelBinder internal class ComplexTypeModelBinder : IModelBinder
{ {
private readonly ParameterInfo _parameterInfo; private readonly ParameterInfo _parameterInfo;
private readonly IContentSerializer _serializer;
public ComplexTypeModelBinder(ParameterInfo parameterInfo) public ComplexTypeModelBinder(ParameterInfo parameterInfo, IContentSerializer contentSerializer)
{ {
_parameterInfo = parameterInfo; _parameterInfo = parameterInfo;
_serializer = contentSerializer;
} }
public Task<ModelBindingResult> BindModelAsync(string content) public Task<ModelBindingResult> BindModelAsync(string content)
...@@ -21,7 +23,7 @@ namespace DotNetCore.CAP.Internal ...@@ -21,7 +23,7 @@ namespace DotNetCore.CAP.Internal
{ {
var type = _parameterInfo.ParameterType; var type = _parameterInfo.ParameterType;
var value = Helper.FromJson(content, type); var value = _serializer.DeSerialize(content, type);
return Task.FromResult(ModelBindingResult.Success(value)); return Task.FromResult(ModelBindingResult.Success(value));
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using DotNetCore.CAP.Abstractions;
using DotNetCore.CAP.Abstractions.ModelBinding; using DotNetCore.CAP.Abstractions.ModelBinding;
using DotNetCore.CAP.Infrastructure; using DotNetCore.CAP.Infrastructure;
...@@ -10,10 +11,16 @@ namespace DotNetCore.CAP.Internal ...@@ -10,10 +11,16 @@ namespace DotNetCore.CAP.Internal
/// <summary> /// <summary>
/// A factory for <see cref="IModelBinder" /> instances. /// A factory for <see cref="IModelBinder" /> instances.
/// </summary> /// </summary>
public class ModelBinderFactory : IModelBinderFactory internal class ModelBinderFactory : IModelBinderFactory
{ {
private readonly ConcurrentDictionary<Key, IModelBinder> _cache = private readonly IContentSerializer _serializer;
new ConcurrentDictionary<Key, IModelBinder>(); private readonly ConcurrentDictionary<Key, IModelBinder> _cache;
public ModelBinderFactory(IContentSerializer contentSerializer)
{
_serializer = contentSerializer;
_cache = new ConcurrentDictionary<Key, IModelBinder>();
}
public IModelBinder CreateBinder(ParameterInfo parameter) public IModelBinder CreateBinder(ParameterInfo parameter)
{ {
...@@ -36,7 +43,7 @@ namespace DotNetCore.CAP.Internal ...@@ -36,7 +43,7 @@ namespace DotNetCore.CAP.Internal
if (!Helper.IsComplexType(parameterInfo.ParameterType)) if (!Helper.IsComplexType(parameterInfo.ParameterType))
binder = new SimpleTypeModelBinder(parameterInfo); binder = new SimpleTypeModelBinder(parameterInfo);
else else
binder = new ComplexTypeModelBinder(parameterInfo); binder = new ComplexTypeModelBinder(parameterInfo, _serializer);
AddToCache(parameterInfo, token, binder); AddToCache(parameterInfo, token, binder);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment