public override ICustomReader GetCustomReader(System.Type type) { const Ref::BindingFlags BF = Ref::BindingFlags.Public | Ref::BindingFlags.NonPublic | Ref::BindingFlags.Instance; const string MISSING_CTOR = @"[BindCustomReaderAttribute({0})] 指定した ICustomReader 実装型{0}には、System.Type 一つを引数に持つコンストラクタ亦は、既定のコンストラクタが定義されていません。 .ctor(System.Type) / .ctor() の何れかが実装されている必要があります。詳細に関しては BindCustomReaderAttribute の説明で確認して下さい。"; //------------------------------------------------------- if (reader != null) { return(reader); } Ref::ConstructorInfo ctor; ctor = reader_type.GetConstructor(BF, null, new System.Type[] { typeof(System.Type) }, null); if (ctor != null) { return(this.reader = (ICustomReader)ctor.Invoke(new object[] { type })); } ctor = reader_type.GetConstructor(BF, null, new System.Type[0], null); if (ctor != null) { return(this.reader = (ICustomReader)ctor.Invoke(new object[0])); } throw new System.MissingMethodException(string.Format(MISSING_CTOR, reader_type)); }
public static CustomObjectPropertyInfo CustomRead(object receiver, string localName, string modelName, Func <string> versionFunc) { ICustomReader reader = receiver as ICustomReader; if (reader != null) { string version; if (reader.SupportVersion) { TkDebug.AssertNotNull(versionFunc, "ICustomer的SupportVersion为true,但是versionFunc传入是null", receiver); version = versionFunc(); } else { version = null; } var result = reader.CanRead(localName, version); if (result != null) { var info = new CustomObjectPropertyInfo(localName, reader, result, version, modelName); return(info); } } return(null); }
/// <summary> /// ICustomReader を登録します。 /// 登録すると ICustomReader で対応している型 T を StreamAccessor の Read<T>() で読み込む事が出来る様になります。 /// </summary> /// <param name="reader">登録する ICustomReader を指定します。</param> public static void RegisterCustomReader(ICustomReader reader) { if (creaders.ContainsKey(reader.Type) && creaders[reader.Type] != null) { throw new System.ApplicationException("追加定義読込は既に定義されています。複数定義されていると不整合の原因になります。"); } creaders[reader.Type] = reader; }
private CustomObjectPropertyInfo(CustomObjectPropertyInfo source, BaseObjectAttribute attribute) : base(attribute, source.ModelName) { fVersion = source.fVersion; fLocalName = source.fLocalName; fReader = source.fReader; fType = source.fType; Converter = source.Converter; fQName = CreateQName(fLocalName); }
public CustomObjectPropertyInfo(string localName, ICustomReader reader, CustomPropertyInfo input, string version, string modelName) : base(input.Attribute, modelName) { fVersion = version; fLocalName = localName; fReader = reader; fType = input.DataType; Converter = input.Converter; fQName = CreateQName(fLocalName); }