public Translator( Type nullTranslator, Type genericCaster, Type loquiTranslation, Type enumTranslation) { this.genericCaster = genericCaster; this.loquiTranslation = loquiTranslation; this.enumTranslation = enumTranslation; var nullCasterType = genericCaster.MakeGenericType(typeof(Object)); var nullTranslation = Activator.CreateInstance(nullTranslator) !; NullTranslationItem = GetResponse <ObjTransl> .Succeed((ObjTransl)Activator.CreateInstance(nullCasterType, new object[] { nullTranslation }) !); var genInterfType = typeof(ObjTransl).GetGenericTypeDefinition(); foreach (var kv in TypeExt.GetInheritingFromGenericInterface(genInterfType)) { if (kv.Value.IsAbstract) { continue; } if (kv.Value.Equals(genericCaster)) { continue; } if (kv.Value.IsGenericTypeDefinition) { GenericTypes.Add(kv.Value); continue; } Type transItemType = kv.Key.GetGenericArguments()[0]; try { SetTranslator( GetCaster(kv.Value, transItemType), transItemType); } catch (Exception ex) { typeDict[transItemType] = GetResponse <ObjTransl> .Fail(ex); } } }
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); } } }