Esempio n. 1
0
        public override void Load()
        {
            foreach (var descriptor in _serviceDescriptors)
            {
                IBindingWhenInNamedWithOrOnSyntax <object> binding;

                if (descriptor.ImplementationType != null)
                {
                    binding = Bind(descriptor.ServiceType).To(descriptor.ImplementationType);
                }
                else if (descriptor.ImplementationFactory != null)
                {
                    binding = Bind(descriptor.ServiceType).ToMethod(context =>
                    {
                        var serviceProvider = context.Kernel.Get <IServiceProvider>();
                        return(descriptor.ImplementationFactory(serviceProvider));
                    });
                }
                else
                {
                    binding = Bind(descriptor.ServiceType).ToConstant(descriptor.ImplementationInstance);
                }

                switch (descriptor.Lifecycle)
                {
                case LifecycleKind.Singleton:
                    binding.InSingletonScope();
                    break;

                case LifecycleKind.Scoped:
                    binding.InKScope();
                    break;

                case LifecycleKind.Transient:
                    binding.InTransientScope();
                    break;
                }
            }

            Bind <IServiceProvider>().ToMethod(context =>
            {
                var resolver        = context.Kernel.Get <IResolutionRoot>();
                var inheritedParams = context.Parameters.Where(p => p.ShouldInherit);

                var scopeParam  = new KScopeParameter(_fallbackProvider);
                inheritedParams = inheritedParams.AddOrReplaceScopeParameter(scopeParam);

                return(new NinjectServiceProvider(resolver, inheritedParams.ToArray()));
            }).InKScope();

            Bind <IServiceScopeFactory>().ToMethod(context =>
            {
                return(new NinjectServiceScopeFactory(context));
            }).InKScope();

            if (_fallbackProvider != null)
            {
                Kernel.Components.Add <IMissingBindingResolver, ChainedMissingBindingResolver>();
            }
        }
 internal static IEnumerable <IParameter> AddOrReplaceScopeParameter(
     this IEnumerable <IParameter> parameters,
     KScopeParameter scopeParameter)
 {
     return(parameters
            .Where(p => p.Name != typeof(KScopeParameter).FullName)
            .Concat(new[] { scopeParameter }));
 }
 public NinjectServiceScope(
     IResolutionRoot resolver,
     IEnumerable <IParameter> inheritedParameters)
 {
     _scope = new KScopeParameter();
     inheritedParameters = inheritedParameters.AddOrReplaceScopeParameter(_scope);
     _serviceProvider    = new NinjectServiceProvider(resolver, inheritedParameters.ToArray());
 }
        public override void Load()
        {
            foreach (var descriptor in _serviceDescriptors)
            {
                IBindingWhenInNamedWithOrOnSyntax<object> binding;

                if (descriptor.ImplementationType != null)
                {
                    binding = Bind(descriptor.ServiceType).To(descriptor.ImplementationType);
                }
                else
                {
                    binding = Bind(descriptor.ServiceType).ToConstant(descriptor.ImplementationInstance);
                }

                switch (descriptor.Lifecycle)
                {
                    case LifecycleKind.Singleton:
                        binding.InSingletonScope();
                        break;
                    case LifecycleKind.Scoped:
                        binding.InKScope();
                        break;
                    case LifecycleKind.Transient:
                        binding.InTransientScope();
                        break;
                }
            }

            Bind<IServiceProvider>().ToMethod(context =>
            {
                var resolver = context.Kernel.Get<IResolutionRoot>();
                var inheritedParams = context.Parameters.Where(p => p.ShouldInherit);

                var scopeParam = new KScopeParameter(_fallbackProvider);
                inheritedParams = inheritedParams.AddOrReplaceScopeParameter(scopeParam);

                return new NinjectServiceProvider(resolver, inheritedParams.ToArray());
            }).InKScope();

            Bind<IServiceScopeFactory>().ToMethod(context =>
            {
                return new NinjectServiceScopeFactory(context);
            }).InKScope();

            if (_fallbackProvider != null)
            {
                Kernel.Components.Add<IMissingBindingResolver, ChainedMissingBindingResolver>();
            }
        }
            public NinjectServiceScope(
                IResolutionRoot resolver,
                IEnumerable <IParameter> inheritedParameters,
                IServiceProvider parentFallbackProvider)
            {
                if (parentFallbackProvider != null)
                {
                    var scopeFactory = parentFallbackProvider.GetServiceOrDefault <IServiceScopeFactory>();
                    if (scopeFactory != null)
                    {
                        _fallbackScope = scopeFactory.CreateScope();
                        _scope         = new KScopeParameter(_fallbackScope.ServiceProvider);
                    }
                }

                if (_scope == null)
                {
                    _scope = new KScopeParameter(parentFallbackProvider);
                }

                inheritedParameters = inheritedParameters.AddOrReplaceScopeParameter(_scope);
                _serviceProvider    = new NinjectServiceProvider(resolver, inheritedParameters.ToArray());
            }
            public NinjectServiceScope(
                IResolutionRoot resolver,
                IEnumerable<IParameter> inheritedParameters,
                IServiceProvider parentFallbackProvider)
            {
                if (parentFallbackProvider != null)
                {
                    var scopeFactory = parentFallbackProvider.GetServiceOrDefault<IServiceScopeFactory>();
                    if (scopeFactory != null)
                    {
                        _fallbackScope = scopeFactory.CreateScope();
                        _scope = new KScopeParameter(_fallbackScope.ServiceProvider);
                    }
                }

                if (_scope == null)
                {
                    _scope = new KScopeParameter(parentFallbackProvider);
                }

                inheritedParameters = inheritedParameters.AddOrReplaceScopeParameter(_scope);
                _serviceProvider = new NinjectServiceProvider(resolver, inheritedParameters.ToArray());
            }