/// <summary>
        /// Adds the dependency.
        /// </summary>
        /// <param name="serviceType">Type of the service to bind to.</param>
        /// <param name="concreteType">Type of the concrete class to create.</param>
        /// <param name="lifetime">The lifetime of the registration.</param>
        protected override void AddDependencyCore(Type serviceType, Type concreteType, DependencyLifetime lifetime)
        {
            var binding = CreateBinding(serviceType, lifetime);

            if (lifetime == DependencyLifetime.PerRequest)
            {
                binding.ProviderCallback = ctx => new PerRequestProvider(concreteType, ctx.Kernel.Components.Get <IPlanner>(), ctx.Kernel.Components.Get <ISelector>());
                binding.Target           = BindingTarget.Provider;
            }
            else
            {
                var bindingBuilder = new BindingBuilder <object>(binding, _kernel);
                var bindingScope   = bindingBuilder.To(concreteType);
                if (lifetime == DependencyLifetime.Singleton)
                {
                    bindingScope.InSingletonScope();
                }
            }

            _kernel.AddBinding(binding);
        }
        /// <summary>
        /// Adds the aliases of component to the binding configurations.
        /// </summary>
        /// <param name="component">The component.</param>
        /// <param name="bindingConfigurations">The binding configurations.</param>
        void AddAliasesOfComponentToBindingConfigurations(Type component, IEnumerable <IBindingConfiguration> bindingConfigurations)
        {
            var services = GetAllServiceTypesFor(component).Where(t => t != component);

            foreach (var service in services)
            {
                foreach (var bindingConfiguration in bindingConfigurations)
                {
                    kernel.AddBinding(new Binding(service, bindingConfiguration));
                }
            }
        }
Example #3
0
        private static void CacheResolutionIfNewlyResolved([NotNull] IKernel kernel, [NotNull] Type interfaceType,
                                                           Type interfaceArgument, Type templateArgument, [NotNull] IEnumerable <IBinding> bindings)
        {
            if (templateArgument == interfaceArgument)
            {
                return;
            }

            // ReSharper disable once PossibleNullReferenceException => Does not return null according to MSDN documentation.
            foreach (var binding in bindings.ToList())
            {
                if (binding != null)
                {
                    kernel.AddBinding(interfaceType, binding.BindingConfiguration);
                }
            }
        }
        private static void RegisterType(IKernel kernel, Type type, IEnumerable<INinjectRegistrationAttribute> attributes)
        {
            var builder = new BindingBuilder() as IBindingBuilder;

            foreach (INinjectRegistrationAttribute attribute in attributes)
            {
                builder = attribute.Register(builder);
            }

            foreach (var service in builder.Services)
            {
                var binding = new Binding(service);
                binding.BindingConfiguration.ScopeCallback = builder.ScopeCallback;
                binding.BindingConfiguration.ProviderCallback = StandardProvider.GetCreationCallback(type);
                binding.BindingConfiguration.Target = BindingTarget.Type;
                kernel.AddBinding(binding);
            }
        }
Example #5
0
 public void AddBinding(IBinding binding)
 {
     _kernel.AddBinding(binding);
 }