public static bool TryGetTranslator(Type t, out IXmlTranslation <object> transl) { if (!typeDict.TryGetValue(t, out NotifyingItem <GetResponse <IXmlTranslation <object> > > not)) { transl = null; return(false); } if (not.Value.Failed) { transl = null; return(false); } transl = not.Value.Value; return(transl != null); }
private static void SetTranslator(IXmlTranslation <Object> transl, Type t) { var resp = typeDict.TryCreateValue( t, () => { return(new NotifyingItem <GetResponse <IXmlTranslation <Object> > >()); }).Value = GetResponse <IXmlTranslation <object> > .Succeed(transl); if (string.IsNullOrEmpty(transl.ElementName)) { return; } elementNameTypeDict.TryCreateValue(transl.ElementName, () => new NotifyingItem <Type>()).Value = t; }
static XmlTranslator() { foreach (var kv in TypeExt.GetInheritingFromGenericInterface(typeof(IXmlTranslation <>))) { Type transItemType = kv.Key.GetGenericArguments()[0]; try { object xmlTransl = Activator.CreateInstance(kv.Value); var xmlConverterGenType = typeof(XmlTranslationCaster <>).MakeGenericType(transItemType); IXmlTranslation <Object> transl = Activator.CreateInstance(xmlConverterGenType, args: new object[] { xmlTransl }) as IXmlTranslation <Object>; SetTranslator(transl, transItemType); } catch (Exception ex) { var resp = typeDict.TryCreateValue( transItemType, () => { return(new NotifyingItem <GetResponse <IXmlTranslation <Object> > >()); }).Value = GetResponse <IXmlTranslation <object> > .Fail(ex); } } }
public XmlTranslationCaster(IXmlTranslation <T> src) { Source = src; }
internal static void SetTranslator <T>(IXmlTranslation <T> transl) { SetTranslator(transl as IXmlTranslation <Object>, typeof(T)); }
protected override GetResponse <IXmlTranslation <object> > SetTranslator_Internal(IXmlTranslation <object> transl, Type t) { var resp = base.SetTranslator_Internal(transl, t); if (string.IsNullOrEmpty(transl.ElementName)) { return(resp); } elementNameTypeDict.GetOrAdd(transl.ElementName, () => t); return(resp); }