Example #1
0
    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);
            }
        }
    }
Example #2
0
 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);
         }
     }
 }