/// <summary> /// Attempts to resolve, and on failure, registers and tries again. /// Might still return null, so must be checked after the call against default{classT}. /// </summary> /// <typeparam name="classT">The type of the class t.</typeparam> /// <param name="diContainer">The di container.</param> /// <param name="storageRule">The storage rule.</param> /// <param name="boundInstance">The bound instance.</param> /// <param name="creator">The creator.</param> /// <param name="conflictResolver">The conflict resolver.</param> /// <returns>classT.</returns> /// <summary> /// Registers the and resolve. /// </summary> /// <typeparam name="classT">The type of the class t.</typeparam> /// <param name="diContainer">The di container.</param> /// <param name="storageRule">The storage rule.</param> /// <param name="boundInstance">The bound instance.</param> /// <param name="creator">The creator.</param> /// <param name="conflictResolver">The conflict resolver.</param> /// <returns>classT.</returns> /// <autogeneratedoc /> /// TODO Edit XML Comment Template for RegisterAndResolve`1 public static classT RegisterAndResolve <classT> ( this ISmartDIContainer diContainer, StorageRules storageRule = StorageRules.AnyAccessLevel, object boundInstance = null, Func <object> creator = null, Func <IDictionary <Type, ITimeStampedCreatorAndStorageRules>, IConflictResolution> conflictResolver = null ) where classT : class { var triedOnce = false; TRYAGAIN: // Prevents thrown errors temporarily diContainer.IgnoreResolveError = true; // Resolves CLASS var possibleT = diContainer.Resolve <classT>(storageRule, boundInstance, conflictResolver); diContainer.IgnoreResolveError = false; if (possibleT.IsNotAnEqualObjectTo(default(classT))) { return(possibleT); } // No reason to keep trying if (triedOnce) { return(default);
/// <summary> /// Initializes a new instance of the <see cref="CreatorAndStorageRule" /> class. /// </summary> /// <param name="creator">The creator.</param> /// <param name="storageRule">The storage rule.</param> public CreatorAndStorageRule ( Func <object> creator = null, StorageRules storageRule = StorageRules.AnyAccessLevel ) { ProvidedStorageRule = storageRule; ProvidedCreator = creator; }