Я пытаюсь написать пользовательские атрибуты для .net, которые имитируют jpa-конвертер в Java, который позволяет мне украшать класс следующим образом:
@Entity(name = "PersonTable")
public class Person {
@Convert(converter = PersonNameConverter.class)
private PersonName personName;
}
Я хочу ограничить тип конвертора для пользователя.можно передать в атрибут Converter для определенного интерфейса, который я определил.
public interface ICustomConverter<T1, T2>
{
T1 ConvertToType1(T2 source);
T2 ConvertToType2(T1 source);
}
Я не смог найти способ сделать это во время компиляции, поэтому я проверяю это во время выполнения с помощью этого кода:
class BooleanConverter : ICustomConverter<bool, string>
{
bool ICustomConverter<bool, string>.ConvertToType1(string source)
{
if ("y".Equals(source.ToLower()))
return true;
else
return false;
}
string ICustomConverter<bool, string>.ConvertToType2(bool source)
{
if (source)
return "Y";
else
return "N";
}
}
[XmlMapper(ParentNodeName = "Loan")]
class Loan
{
[CustomConverterAttribute(typeof(BooleanConverter))]
public bool IsJointAccount { get; set; }
}
public CustomConverterAttribute(Type converter)
{
_converter = converter;
_convertToType1 = converter
.GetMethod("ConvertToType1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy);
_convertToType2 = converter
.GetMethod("ConvertToType2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy);
_type1 = _convertToType1.ReturnType;
_type2 = _convertToType2.ReturnType;
_converterInstance = ReflectionUtils.CreateInstance(_converter);
}
Но и .GetMethods (), и .GetMethod () не возвращают реализованные методы.Я пробовал различные различные BindingFlags, такие как (BindingFlags.DeclaredOnly), но ни один из параметров привязки фактически не возвращает эти методы.