Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
 /// <summary>
 /// ICustomReader を登録します。
 /// 登録すると ICustomReader で対応している型 T を StreamAccessor の Read&lt;T&gt;() で読み込む事が出来る様になります。
 /// </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);
 }