예제 #1
0
        private object InternalResolve(IInjectContext injectContext)
        {
            object instance;

            BoundObjects = BoundObjects ?? new List <object>();

            switch (BindingType)
            {
            case BindingType.Singleton:
                if (BoundObjects.Count == 0)
                {
                    instance = ResolveNew(injectContext);
                    BoundObjects.Add(instance);

                    Container.Injector.Inject(instance, injectContext);

                    Resolved?.Invoke(true, this, null);
                }
                else
                {
                    instance = BoundObjects.FirstOrDefault();

                    Resolved?.Invoke(false, this, null);
                }
                break;

            case BindingType.Transient:
                instance = ResolveNew(injectContext);
                Container.Injector.Inject(instance, injectContext);

                Resolved?.Invoke(true, this, null);
                break;

            default:
                throw new InvalidOperationException();
            }

            return(instance);
        }