示例#1
0
 // TODO: Put strings into the resources.
 //
 public DependencyResolutionSpecs(
     Type dependencyType,
     bool ensureResolution                                = false,
     bool isNewInstanceRequired                           = false,
     IArgsTuple newInstanceFactoryArgs                    = null,
     bool preventNewInstanceInitialization                = false,
     IDependencyResolutionModel primaryResolutionModel    = null,
     IDependencyResolutionSelectCriterion selectCriterion = null,
     IDisposeRegistry disposeRegistry                     = null)
 {
     //
     dependencyType.EnsureNotNull(nameof(dependencyType));
     if (!isNewInstanceRequired && newInstanceFactoryArgs != null)
     {
         throw
             new ArgumentException(
                 message: $"Этот аргумент не применим и должен иметь значение '{((object)null).FmtStr().G()}', когда значение аргумента '{nameof(isNewInstanceRequired)}' равно '{false.FmtStr().G()}'.",
                 paramName: nameof(newInstanceFactoryArgs));
     }
     //
     _dependencyType                   = dependencyType;
     _ensureResolution                 = ensureResolution;
     _isNewInstanceRequired            = isNewInstanceRequired;
     _newInstanceFactoryArgs           = newInstanceFactoryArgs;
     _preventNewInstanceInitialization = preventNewInstanceInitialization;
     _primaryResolutionModel           = primaryResolutionModel;
     _selectCriterion                  = selectCriterion;
     _disposeRegistry                  = disposeRegistry;
 }
示例#2
0
 public CtorFactoryDependencyHandler(
     Func <TArg1, TArg2, TArg3, TArg4, TDependencyInstance> customCtor = null,
     bool canShareDependency = false,
     IArgsTuple <TArg1, TArg2, TArg3, TArg4> factoryArgs = null)
     : base(requireClassTDependencyInstance : customCtor == null)
 {
     //
     factoryArgs
     ?.ArgsCount
     .Arg($"{nameof(factoryArgs)}.{nameof(factoryArgs.ArgsCount)}")
     .EnsureEq(__ArgsCount);
     //
     _customCtor         = customCtor;
     _canShareDependency = canShareDependency;
     _factoryArgs        = factoryArgs;
     //
     if (customCtor == null)
     {
         _getDependencyCtor = () => __DependencyInstanceCtor.Value;
     }
     else
     {
         _getDependencyCtor = () => ReadDA(ref _customCtor);
     }
 }
 protected override void Dispose(bool explicitDispose)
 {
     _getDependencyCtor = null;
     _customCtor        = null;
     _factoryArgs       = null;
     //
     base.Dispose(explicitDispose);
 }
示例#4
0
 public CtorFactoryDependencyHandler(
     bool canShareDependency,
     IArgsTuple <TArg1, TArg2, TArg3, TArg4> factoryArgs = null)
     : this(
         customCtor : null,
         canShareDependency : canShareDependency,
         factoryArgs : factoryArgs)
 {
 }
示例#5
0
 protected override void Dispose(bool explicitDispose)
 {
     _dependencyType         = null;
     _primaryResolutionModel = null;
     _selectCriterion        = null;
     _newInstanceFactoryArgs = null;
     _disposeRegistry        = null;
     //
     base.Dispose(explicitDispose);
 }
 public DependencyResolutionSpecs(
     Type dependencyTypeConstraint                     = null,
     bool ensureResolution                             = false,
     bool isNewInstanceRequired                        = false,
     IArgsTuple newInstanceFactoryArgs                 = null,
     bool preventNewInstanceInitialization             = false,
     IDependencyResolutionModel primaryResolutionModel = null,
     IDependencyResolutionSelectCriterion <TDependency> selectCriterion = null,
     IDisposeRegistry disposeRegistry = null)
     : base(
         dependencyType: dependencyTypeConstraint.Arg(nameof(dependencyTypeConstraint)).EnsureCompatible(__DependencyType).Value ?? __DependencyType,
         ensureResolution: ensureResolution,
         isNewInstanceRequired: isNewInstanceRequired,
         newInstanceFactoryArgs: newInstanceFactoryArgs,
         preventNewInstanceInitialization: preventNewInstanceInitialization,
         primaryResolutionModel: primaryResolutionModel,
         selectCriterion: selectCriterion,
         disposeRegistry: disposeRegistry)
 {
     _selectCriterion = selectCriterion;
 }
 protected sealed override void GetFactoryArgs(out IArgsTuple factoryArgs)
 => factoryArgs = ReadDA(ref _factoryArgs);
示例#8
0
 protected abstract void GetFactoryArgs(out IArgsTuple factoryArgs);
示例#9
0
 public static Type GetIArgsTupleType(IArgsTuple args)
 => GetIArgsTupleType(hnd: args.Arg(nameof(args)));