/// <summary>
 /// Syntax:   getProxyObject({type} {assembly})  or getProxyType({type}}  
 /// </summary>
 /// <param name="appDomain"></param>
 /// <param name="rawTypeOfProxyToCreate"></param>
 /// <returns></returns>
 public static object getProxyObject(this AppDomain appDomain, string rawTypeOfProxyToCreate)
 {
     string assemblyName = "";
     string typeOfProxyToCreate = "";
     try
     {
         var foundProxyType = appDomain.getProxyType(rawTypeOfProxyToCreate, ref assemblyName, ref typeOfProxyToCreate);
         if (foundProxyType != null)
         {
             object proxy = appDomain.CreateInstanceAndUnwrap(assemblyName, typeOfProxyToCreate);
             if (proxy.notNull())
                 return proxy;
         }
         "could not create object: ".error(rawTypeOfProxyToCreate);
     }
     catch (Exception ex)
     {
         PublicDI.log.ex(ex, "error creating object: " + rawTypeOfProxyToCreate);
     }
     return null;
     //return appDomain.CreateInstanceAndUnwrap(dllToLoad, typeToCreateAndUnwrap);
 }
        /// <summary>
        /// Syntax: getProxyMethod({method} {type} {assembly}) 
        /// </summary>
        /// <param name="appDomain"></param>
        /// <param name="methodToCreate"></param>
        /// <param name="methodParameters"></param>
        /// <returns></returns>
        public static object getProxyMethod(this AppDomain appDomain,string methodToCreate, object[] methodParameters)
        {
            try
            {
                string[] splitedType = methodToCreate.Split(' ');
                if (splitedType.Length != 3)
                    PublicDI.log.error(
                        "in getProxyMethod, wrong format provided (syntax:  getProxyMethod({method} {type} {assembly}) ) :  " +
                        methodToCreate);
                else
                {
                    string methodName = splitedType[0];
                    string typeName = splitedType[1];
                    string assemblyName = splitedType[2];

                    var proxyObject = appDomain.CreateInstanceAndUnwrap(assemblyName, typeName);
                    if (proxyObject.isNull())
                        PublicDI.log.error("in getProxyMethod, could not create proxy:{0} in assembly {1}", typeName,
                            assemblyName);
                    else
                    {
                        MethodInfo methodInfo = PublicDI.reflection.getMethod(proxyObject.GetType(), methodName,
                            methodParameters);
                        if (methodInfo == null)
                            PublicDI.log.error("in getProxyMethod, could not find method {0} in type {1}", methodName,
                                proxyObject.GetType());

                        return methodInfo;
                    }
                }
            }
            catch (Exception ex)
            {
                PublicDI.log.ex(ex, "in getProxyMethod, error creating: " + methodToCreate);
            }
            return null;
        }
 /// <summary>
 /// Creates a new instance of the specified type defined in the specified assembly file.
 /// </summary>
 /// <param name="appDomain">The app domain.</param>
 /// <param name="assemblyFile">The assembly file.</param>
 /// <param name="typeName">Name of the type.</param>
 /// <param name="ignoreCase">if set to <c>true</c> [ignore case].</param>
 /// <param name="bindingAttr">The binding attr.</param>
 /// <param name="binder">The binder.</param>
 /// <param name="args">The args.</param>
 /// <param name="culture">The culture.</param>
 /// <param name="activationAttributes">The activation attributes.</param>
 /// <returns></returns>
 public static object CreateInstanceAndUnwrap(this AppDomain appDomain, string assemblyFile, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
 {
     return appDomain.CreateInstanceAndUnwrap(assemblyFile, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, AppDomain.CurrentDomain.Evidence);
 }
 public static object createAndUnWrap(this AppDomain appDomain, string dllWithType, string typeToCreateAndUnwrap)
 {
     return appDomain.CreateInstanceAndUnwrap(dllWithType, typeToCreateAndUnwrap);
 }