private static void SetUpInternal(IBuildUpStrategy buildUpStrategy, Action <string> logger) { _buildUpStrategy = buildUpStrategy; _logger = logger; Log("Setting up UIStoryboard for UIViewController dependency injection."); CallbackDelegateNamed d = Inject; var newImpl = Marshal.GetFunctionPointerForDelegate(d); _originalImpl = method_setImplementation(Method, newImpl); }
/// <summary> /// Sets up dependency injection using the provided /// <see cref="F23.Mobile.iOS.DependencySwizzler.IBuildUpStrategy"/> /// and logging callback. /// </summary> /// <param name="buildUpStrategy">The <see cref="F23.Mobile.iOS.DependencySwizzler.IBuildUpStrategy" /> /// used to build up instances of <see cref="UIKit.UIViewController"/>.</param> /// <param name="logger"">A callback for logging messages.</param> public static void SetUp(IBuildUpStrategy buildUpStrategy, Action <string> logger) { if (buildUpStrategy == null) { throw new ArgumentNullException("buildUpStrategy"); } lock (_lock) { ResetInternal(); SetUpInternal(buildUpStrategy, logger); } }
private static void ResetInternal() { if (_originalImpl == IntPtr.Zero) { return; } Log("Resetting UIStoryboard. No more dependency injection... :("); method_setImplementation(Method, _originalImpl); _originalImpl = IntPtr.Zero; _buildUpStrategy = null; _logger = null; }
/// <summary> /// Sets up dependency injection using the provided /// <see cref="F23.Mobile.iOS.DependencySwizzler.IBuildUpStrategy"/>. /// </summary> /// <param name="buildUpStrategy">The <see cref="F23.Mobile.iOS.DependencySwizzler.IBuildUpStrategy" /> /// used to build up instances of <see cref="UIKit.UIViewController"/>.</param> public static void SetUp(IBuildUpStrategy buildUpStrategy) { SetUp(buildUpStrategy, null); }