예제 #1
0
 internal Registration(Type abstractType, Type concreteType, Func<IContainer, object> ctor, Lifecycle lifecycle, InjectionBehaviour injectionBehaviour)
 {
     this.AbstractType = abstractType;
     this.ConcreteType = concreteType;
     this.Ctor = ctor;
     this.Lifecycle = lifecycle;
     this.InjectionBehaviour = injectionBehaviour;
 }
예제 #2
0
 internal Registration(Type abstractType, Type concreteType, Func <IContainer, object> ctor, Lifecycle lifecycle, InjectionBehaviour injectionBehaviour)
 {
     this.AbstractType       = abstractType;
     this.ConcreteType       = concreteType;
     this.Ctor               = ctor;
     this.Lifecycle          = lifecycle;
     this.InjectionBehaviour = injectionBehaviour;
 }
예제 #3
0
        public void Inject(Type type, object instance, InjectionBehaviour injectionBehaviour)
        {
            if (!this.InjectedRegistrations.ContainsKey(type))
                this.InjectedRegistrations.Add(type, new List<Registration>());

            var registration = new Registration(type, instance?.GetType() ?? type, null, this.Lifecycle, injectionBehaviour);
            this.InjectedRegistrations[type].Add(registration);

            this.Insert(registration, type, instance);
        }
예제 #4
0
        public void Inject(object instance, Type type, Lifecycle lifeCycle, InjectionBehaviour injectionBehaviour)
        {
            if (lifeCycle == Lifecycle.Transient)
            {
                throw new ArgumentException("You cannot inject an instance as Transient. That doesn't make sense, does it? Think about it...");
            }

            var store = this.GetStore(lifeCycle);

            lock (store.Mutex)
                store.Inject(type, instance, injectionBehaviour);
        }
예제 #5
0
        public void Inject(Type type, object instance, InjectionBehaviour injectionBehaviour)
        {
            if (!this.InjectedRegistrations.ContainsKey(type))
            {
                this.InjectedRegistrations.Add(type, new List <Registration>());
            }

            var registration = new Registration(type, instance?.GetType() ?? type, null, this.Lifecycle, injectionBehaviour);

            this.InjectedRegistrations[type].Add(registration);

            this.Insert(registration, type, instance);
        }
예제 #6
0
        public void Inject(object instance, Type type, Lifecycle lifeCycle, InjectionBehaviour injectionBehaviour)
        {
            if (lifeCycle == Lifecycle.Transient)
                throw new ArgumentException("You cannot inject an instance as Transient. That doesn't make sense, does it? Think about it...");

            lock (this.mutex)
            {
                switch (lifeCycle)
                {
                    case Lifecycle.Singleton:
                        this.singletonInstanceStore.Inject(type, instance, injectionBehaviour);
                        break;
                    case Lifecycle.HttpContextOrThreadLocal:
                        this.httpContextOrThreadLocalStore.Inject(type, instance, injectionBehaviour);
                        break;
                    case Lifecycle.HttpContextOrExecutionContextLocal:
                        this.httpContextOrExecutionContextLocalStore.Inject(type, instance, injectionBehaviour);
                        break;
                    default:
                        throw new NotSupportedException();
                }
            }
        }
예제 #7
0
 public void Inject(Type type, object instance, InjectionBehaviour injectionBehaviour)
 {
     throw new InvalidOperationException();
 }
예제 #8
0
 /// <summary>
 /// Injects an instance
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="container"></param>
 /// <param name="instance"></param>
 /// <param name="lifeCycle"></param>
 /// <param name="injectionBehaviour"></param>
 public static void Inject <T>(this IContainer container, T instance, Lifecycle lifeCycle = Lifecycle.Singleton, InjectionBehaviour injectionBehaviour = InjectionBehaviour.Default)
 {
     container.Inject(instance, typeof(T), lifeCycle, injectionBehaviour);
 }