/// <summary> /// Gets the callbacks. /// </summary> private static Callbacks GetCallbacks(Env env, Jvm jvm) { if (AppDomain.CurrentDomain.IsDefaultAppDomain()) { return(new Callbacks(env, jvm)); } // JVM exists once per process, and JVM callbacks exist once per process. // We should register callbacks ONLY from the default AppDomain (which can't be unloaded). // Non-default appDomains should delegate this logic to the default one. var defDomain = AppDomains.GetDefaultAppDomain(); // In some cases default AppDomain is not able to locate Apache.Ignite.Core assembly. // First, use CreateInstanceFrom to set up the AssemblyResolve handler. var resHelpType = typeof(AssemblyResolver); var resHelp = (AssemblyResolver)defDomain.CreateInstanceFrom(resHelpType.Assembly.Location, resHelpType.FullName) .Unwrap(); resHelp.TrackResolve(resHelpType.Assembly.FullName, resHelpType.Assembly.Location); // Now use CreateInstance to get the domain helper of a properly loaded class. var type = typeof(CallbackAccessor); var helper = (CallbackAccessor)defDomain.CreateInstance(type.Assembly.FullName, type.FullName).Unwrap(); return(helper.GetCallbacks()); }
/// <summary> /// Gets the callbacks. /// </summary> private static Callbacks GetCallbacksFromDefaultDomainImpl() { // JVM exists once per process, and JVM callbacks exist once per process. // We should register callbacks ONLY from the default AppDomain (which can't be unloaded). // Non-default appDomains should delegate this logic to the default one. var defDomain = AppDomains.GetDefaultAppDomain(); // In some cases default AppDomain is not able to locate Apache.Ignite.Core assembly. // First, use CreateInstanceFrom to set up the AssemblyResolve handler. var resHelpType = typeof(AssemblyResolver); var handle = InvokeMethod(defDomain, "CreateInstanceFrom", resHelpType.Assembly.Location, resHelpType.FullName); var resHelp = (AssemblyResolver)InvokeMethod(handle, "Unwrap"); resHelp.TrackResolve(resHelpType.Assembly.FullName, resHelpType.Assembly.Location); // Now use CreateInstance to get the domain helper of a properly loaded class. var type = typeof(CallbackAccessor); var helperHandle = InvokeMethod(defDomain, "CreateInstance", type.Assembly.FullName, type.FullName); var helper = (CallbackAccessor)InvokeMethod(helperHandle, "Unwrap"); return(helper.GetCallbacks()); }
/// <summary> /// Gets the callbacks. /// </summary> private static Callbacks GetCallbacksFromDefaultDomain() { #if !NETCOREAPP2_0 // JVM exists once per process, and JVM callbacks exist once per process. // We should register callbacks ONLY from the default AppDomain (which can't be unloaded). // Non-default appDomains should delegate this logic to the default one. var defDomain = AppDomains.GetDefaultAppDomain(); // In some cases default AppDomain is not able to locate Apache.Ignite.Core assembly. // First, use CreateInstanceFrom to set up the AssemblyResolve handler. var resHelpType = typeof(AssemblyResolver); var resHelp = (AssemblyResolver)defDomain.CreateInstanceFrom(resHelpType.Assembly.Location, resHelpType.FullName) .Unwrap(); resHelp.TrackResolve(resHelpType.Assembly.FullName, resHelpType.Assembly.Location); // Now use CreateInstance to get the domain helper of a properly loaded class. var type = typeof(CallbackAccessor); var helper = (CallbackAccessor)defDomain.CreateInstance(type.Assembly.FullName, type.FullName).Unwrap(); return(helper.GetCallbacks()); #else throw new IgniteException("Multiple domains are not supported on .NET Core."); #endif }