예제 #1
0
        public void Test_CanLoad_AndResolve_BindToType(int nTestThreads)
        {
            StandardDependencyResolver resolver =
                new StandardDependencyResolver();

            List <DependencyRegistration> dependencies =
                new List <DependencyRegistration>();

            dependencies.Add(DependencyRegistration.BindToType(typeof(IAsSingletonSampleDependency),
                                                               typeof(AsSingletonSampleDependencyImpl),
                                                               DependencyScope.Singleton));

            dependencies.Add(DependencyRegistration.BindToType(typeof(IAsThreadSingletonSampleDependency),
                                                               typeof(AsThreadSingletonSampleDependencyImpl),
                                                               DependencyScope.Thread));

            dependencies.Add(DependencyRegistration.BindToType(typeof(IAsTransientSampleDependency),
                                                               typeof(AsTransientSampleDependencyImpl),
                                                               DependencyScope.Transient));

            resolver.Load(dependencies);

            Assert_DependenciesCanBeResolved(resolver);
            Assert_DependenciesCorrectlyResolved(nTestThreads, resolver);
        }
        public IDependencyBindingScopeSetup BindToType(Type target,
                                                       Type implementationType)
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            if (implementationType == null)
            {
                throw new ArgumentNullException(nameof(implementationType));
            }

            if (HasBindingFor(target))
            {
                throw new InvalidOperationException($"Target type {target.Name} is already bound.");
            }

            DependencyRegistration reg = DependencyRegistration.BindToType(target,
                                                                           asImplementation: implementationType,
                                                                           scope: DependencyScope.Transient);

            mDependencyRegistrations.Add(reg);
            return(new StandardDependencyBindingScopeSetup(reg));
        }
        public IDependencySetup BindToType(Type target,
                                           Type implementationType,
                                           DependencyScope scope)
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            if (implementationType == null)
            {
                throw new ArgumentNullException(nameof(implementationType));
            }

            if (HasBindingFor(target))
            {
                throw new InvalidOperationException($"Target type {target.Name} is already bound.");
            }

            mDependencyRegistrations.Add(DependencyRegistration.BindToType(target,
                                                                           asImplementation: implementationType,
                                                                           scope: scope));

            return(this);
        }
        public IDependencySetup BindToType <T, TImplementation> (DependencyScope scope)
            where TImplementation : T
        {
            if (HasBindingFor <T>())
            {
                throw new InvalidOperationException($"Target type {typeof( T ).Name} is already bound.");
            }

            mDependencyRegistrations.Add(DependencyRegistration.BindToType(typeof(T),
                                                                           asImplementation: typeof(TImplementation),
                                                                           scope: scope));

            return(this);
        }
        public IDependencyBindingScopeSetup BindToType <T, TImplementation> ()
            where TImplementation : T
        {
            if (HasBindingFor <T>())
            {
                throw new InvalidOperationException($"Target type {typeof( T ).Name} is already bound.");
            }

            DependencyRegistration reg = DependencyRegistration.BindToType(typeof(T),
                                                                           asImplementation: typeof(TImplementation),
                                                                           scope: DependencyScope.Transient);

            mDependencyRegistrations.Add(reg);
            return(new StandardDependencyBindingScopeSetup(reg));
        }