海淀天下城电子沙盘单机版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.6 KiB

4 years ago

using MessagePack.Formatters;
using System;
using System.Reflection;
namespace MessagePack
{
public interface IFormatterResolver
{
IMessagePackFormatter<T> GetFormatter<T>();
}
public static class FormatterResolverExtensions
{
public static IMessagePackFormatter<T> GetFormatterWithVerify<T>(this IFormatterResolver resolver)
{
IMessagePackFormatter<T> formatter;
try
{
formatter = resolver.GetFormatter<T>();
}
catch (TypeInitializationException ex)
{
Exception inner = ex;
while (inner.InnerException != null)
{
inner = inner.InnerException;
}
throw inner;
}
if (formatter == null)
{
throw new FormatterNotRegisteredException(typeof(T).FullName + " is not registered in this resolver. resolver:" + resolver.GetType().Name);
}
return formatter;
}
#if !UNITY_WSA
public static object GetFormatterDynamic(this IFormatterResolver resolver, Type type)
{
var methodInfo = typeof(IFormatterResolver).GetRuntimeMethod("GetFormatter", Type.EmptyTypes);
var formatter = methodInfo.MakeGenericMethod(type).Invoke(resolver, null);
return formatter;
}
#endif
}
public class FormatterNotRegisteredException : Exception
{
public FormatterNotRegisteredException(string message) : base(message)
{
}
}
}