I'm trying to write custom attributes for .net that mimic the jpa converter in Java that allows me to decorate a class like so:
@Entity(name = "PersonTable")
public class Person {
@Convert(converter = PersonNameConverter.class)
private PersonName personName;
}
I want to restrict the type of converter the user can pass into the Converter attribute to be a particular interface that I defined.
public interface ICustomConverter<T1, T2>
{
T1 ConvertToType1(T2 source);
T2 ConvertToType2(T1 source);
}
I could not find a way to do this during compile time, so I'm testing out this during runtime with this code:
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);
}
But both .GetMethods() and .GetMethod() do not return the implemented methods. I have tried various different BindingFlags such as (BindingFlags.DeclaredOnly) but none of the binding options actually return these methods.
Aucun commentaire:
Enregistrer un commentaire