Ejemplo n.º 1
0
 internal ConventionDependencyInjectionBehavior(
     IDependencyInjectionBehavior decoratee, IParameterConvention convention, Container container)
 {
     _decoratee  = decoratee;
     _convention = convention;
     _container  = container;
 }
Ejemplo n.º 2
0
 internal static void Verify(this IDependencyInjectionBehavior behavior, ConstructorInfo constructor)
 {
     foreach (ParameterInfo parameter in constructor.GetParameters())
     {
         behavior.Verify(new InjectionConsumerInfo(parameter));
     }
 }
Ejemplo n.º 3
0
 public MsContextualLoggerInjectionBehavior(
     ILoggerFactory factory, Container container)
 {
     this.factory   = factory;
     this.original  = container.Options.DependencyInjectionBehavior;
     this.container = container;
 }
 public ContextualDecoratorInjectionBehavior(Container container,
                                             ContextualPredicateCollection contextualPredicates)
 {
     this.container            = container;
     this.contextualPredicates = contextualPredicates;
     this.defaultBehavior      = container.Options.DependencyInjectionBehavior;
 }
 public ConventionDependencyInjectionBehavior(
     IDependencyInjectionBehavior decorated, IParameterConvention convention,
     Container container)
 {
     this.decorated  = decorated;
     this.convention = convention;
     this.container  = container;
 }
Ejemplo n.º 6
0
 internal static void Verify(this IDependencyInjectionBehavior behavior, Type serviceType, 
     ConstructorInfo constructor)
 {
     foreach (var parameter in constructor.GetParameters())
     {
         behavior.Verify(new InjectionConsumerInfo(serviceType, constructor.DeclaringType, parameter));
     }
 }
Ejemplo n.º 7
0
        internal ContainerOptions(Container container)
        {
            Requires.IsNotNull(container, nameof(container));

            this.Container          = container;
            this.resolutionBehavior = new DefaultConstructorResolutionBehavior();
            this.injectionBehavior  = new DefaultDependencyInjectionBehavior(container);
            this.propertyBehavior   = new DefaultPropertySelectionBehavior();
            this.lifestyleBehavior  = new DefaultLifestyleSelectionBehavior(this);
        }
Ejemplo n.º 8
0
        internal ContainerOptions(Container container)
        {
            Requires.IsNotNull(container, "container");

            this.Container                 = container;
            this.resolutionBehavior        = new DefaultConstructorResolutionBehavior();
            this.injectionBehavior         = new DefaultDependencyInjectionBehavior(container);
            this.propertyBehavior          = new DefaultPropertySelectionBehavior();
            this.lifestyleBehavior         = new DefaultLifestyleSelectionBehavior(Lifestyle.Transient);
            this.batchRegistrationBehavior = new DefaultBatchRegistrationBehavior(container);
        }
Ejemplo n.º 9
0
        internal static string?VerifyConstructor(
            this IDependencyInjectionBehavior behavior, ConstructorInfo constructor)
        {
            foreach (ParameterInfo parameter in constructor.GetParameters())
            {
                if (!behavior.VerifyDependency(new InjectionConsumerInfo(parameter), out string?message))
                {
                    return(message);
                }
            }

            return(null);
        }
 public FancyInjectionBehavior(Container container, Func <InjectionConsumerInfo, bool> canResolve, Func <InjectionConsumerInfo, T> instanceCreator, Func <InjectionConsumerInfo, object> keyFunc, Lifestyle lifestyle)
 {
     this.container     = container;
     this.innerBehavior = container.Options.DependencyInjectionBehavior;
     this.canResolve    = canResolve;
     this.resolve       = instanceCreator;
     this.lifestyle     = lifestyle;
     if (keyFunc == null)
     {
         this.keyFunc = info => info;
     }
     else
     {
         this.keyFunc = keyFunc;
     }
 }
Ejemplo n.º 11
0
        /// <summary>Verifies the specified <paramref name="consumer"/>.</summary>
        /// <param name="behavior">The behavior.</param>
        /// <param name="consumer">Contextual information about the consumer where the built dependency is
        /// injected into.</param>
        /// <exception cref="ActivationException">
        /// Thrown when the type of the <see cref="InjectionConsumerInfo.Target">target</see> supplied with
        /// the supplied <paramref name="consumer"/> cannot be used for auto wiring.</exception>
        /// <exception cref="ArgumentNullException">Thrown when one of the supplied arguments is a null
        /// reference.</exception>
        public static void Verify(
            this IDependencyInjectionBehavior behavior, InjectionConsumerInfo consumer)
        {
            // NOTE: In v5, both IConstructorResolutionBehavior's and IDependencyInjectionBehavior's method
            // signatures changed (see #557). This is both a binary and code breaking change, which affects
            // anyone implementing an IDependencyInjectionBehavior. There's nothing much we can do about
            // this (since fixing #557 was more important). By adding this extension method, however, we can
            // reduce the pain for anyone using (calling) this interface. This extension method duplicates
            // the signature and behavior of the old method. This still makes the change binary incompatible,
            // even from perspective of the caller, but it would allow their code to keep compiling (mostly).
            Requires.IsNotNull(behavior, nameof(behavior));
            Requires.IsNotNull(consumer, nameof(consumer));

            if (!behavior.VerifyDependency(consumer, out string?message))
            {
                throw new ActivationException(
                          message is null || string.IsNullOrWhiteSpace(message)
                        ? StringResources.DependencyNotValidForInjectionAccordingToCustomInjectionBehavior(
                              behavior, consumer)
                        : message);
            }
        }
 public OptionalArgumentsInjectionBehavior(Container container, IDependencyInjectionBehavior original)
 {
     this.container = container;
     this.original  = original;
 }
Ejemplo n.º 13
0
 public AutomaticParameterizedFactoriesHelper(ContainerOptions options)
 {
     this.container        = options.Container;
     this.originalBehavior = options.DependencyInjectionBehavior;
 }
 public NamedDependencyInjectionBehavior(IDependencyInjectionBehavior defaultBehavior,
     Func<Type, string, InstanceProducer> keyedProducerRetriever)
 {
     this.defaultBehavior = defaultBehavior;
     this.keyedProducerRetriever = keyedProducerRetriever;
 }
 public OptionalParameterConvention(IDependencyInjectionBehavior injectionBehavior)
 {
     this.injectionBehavior = injectionBehavior;
 }
 public OptionalArgumentsInjectionBehavior(Container container, IDependencyInjectionBehavior original)
 {
     this.container = container;
     this.original = original;
 }
 public ConventionDependencyInjectionBehavior(
     IDependencyInjectionBehavior decorated, IParameterConvention convention)
 {
     this.decorated = decorated;
     this.convention = convention;
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Get a new instance
 /// </summary>
 /// <param name="initial">Behavior we're about to decorate</param>
 /// <param name="convention">New behavior</param>
 public ConventionDependencyInjectionBehavior(IDependencyInjectionBehavior initial, IParameterConvention convention)
 {
     _initial    = initial;
     _convention = convention;
 }
 public OptionalParameterConvention(IDependencyInjectionBehavior injectionBehavior)
 {
     this.injectionBehavior = injectionBehavior;
 }
Ejemplo n.º 20
0
 public SerilogContextualLoggerInjectionBehavior(ContainerOptions options)
 {
     this.original  = options.DependencyInjectionBehavior;
     this.container = options.Container;
 }
 public ContextualDecoratorInjectionBehavior(Container container, 
     ContextualPredicateCollection contextualPredicates)
 {
     this.contextualPredicates = contextualPredicates;
     this.defaultBehavior = container.Options.DependencyInjectionBehavior;
 }
Ejemplo n.º 22
0
 public NamedDependencyInjectionBehavior(IDependencyInjectionBehavior defaultBehavior,
                                         Func <Type, string, InstanceProducer> keyedProducerRetriever)
 {
     this.defaultBehavior        = defaultBehavior;
     this.keyedProducerRetriever = keyedProducerRetriever;
 }
Ejemplo n.º 23
0
        internal ContainerOptions(Container container)
        {
            Requires.IsNotNull(container, nameof(container));

            this.Container = container;
            this.resolutionBehavior = new DefaultConstructorResolutionBehavior();
            this.injectionBehavior = new DefaultDependencyInjectionBehavior(container);
            this.propertyBehavior = new DefaultPropertySelectionBehavior();
            this.lifestyleBehavior = new DefaultLifestyleSelectionBehavior(Lifestyle.Transient);
        }
Ejemplo n.º 24
0
 public static Expression BuildExpression(this IDependencyInjectionBehavior behavior,
                                          InjectionConsumerInfo consumer)
 {
     throw new NotSupportedException(DependencyInjectionBehaviorObsoleteMessage);
 }
Ejemplo n.º 25
0
 public SeriLogContextualLoggerInjectionBrehavior(ContainerOptions options)
 {
     original  = options.DependencyInjectionBehavior;
     container = options.Container;
 }
Ejemplo n.º 26
0
 internal static string DependencyInjectionBehaviorReturnedNull(IDependencyInjectionBehavior behavior) => 
     string.Format(CultureInfo.InvariantCulture,
         "The {0} that was registered through the Container.{3}.{4} property, returned a null " +
         "reference after its BuildExpression() method. {1}.BuildExpression implementations should " +
         "never return null, but should throw a {2} with an expressive message instead.",
         behavior.GetType().ToFriendlyName(),
         nameof(IDependencyInjectionBehavior),
         typeof(ActivationException).FullName,
         nameof(Container.Options),
         nameof(ContainerOptions.DependencyInjectionBehavior));
Ejemplo n.º 27
0
 public FeatureInjectionBehavior(Container container, IDependencyInjectionBehavior behavior)
 {
     this.container = container;
     this.behavior  = behavior;
 }