Very simple default implementation of the ISimpleTypeFinder: it can be used as a base class. Static Default and WeakDefault are available.
Inheritance: ISimpleTypeFinder
Esempio n. 1
0
        void DoDefaultInitialize()
        {
            const string _defType       = "System.Configuration.ConfigurationManager, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
            Type         configMananger = SimpleTypeFinder.WeakResolver(_defType, false);

            // Type op_equality is not portable: use ReferenceEquals.
            if (!ReferenceEquals(configMananger, null))
            {
                Type[]     stringParams   = new Type[] { typeof(string) };
                MethodInfo getAppSettings = configMananger.GetProperty("AppSettings", BindingFlags.Public | BindingFlags.Static).GetGetMethod();
                MethodInfo indexer        = getAppSettings.ReturnType.GetProperty("Item", typeof(string), stringParams).GetGetMethod();

                DynamicMethod getter = new DynamicMethod("CK-ReadConfigurationManagerAppSettings", typeof(string), stringParams, true);
                ILGenerator   g      = getter.GetILGenerator();
                g.EmitCall(OpCodes.Call, getAppSettings, null);
                g.Emit(OpCodes.Ldarg_0);
                g.EmitCall(OpCodes.Call, indexer, null);
                g.Emit(OpCodes.Ret);
                _initializedGetObject = _getObject = (Func <string, object>)getter.CreateDelegate(typeof(Func <string, object>));
                _initialized          = true;
            }
            else
            {
                throw new CKException(Impl.CoreResources.AppSettingsDefaultInitializationFailed);
            }
        }