コード例 #1
0
        public virtual T CreateService <T>() where T : IAppService
        {
            object serviceObj = this._serviceProvider.GetService(typeof(T));

            if (serviceObj == null)
            {
                throw new Exception("Can not find the service.");
            }

            T service = (T)serviceObj;

            IAppServiceFactoryProvider factoryProvider = service as IAppServiceFactoryProvider;

            if (factoryProvider != null)
            {
                factoryProvider.ServiceFactory = this;
            }

            if (service is IUserSessionAppService)
            {
                ((IUserSessionAppService)service).UserSession = this.Session;
            }

            return(service);
        }
コード例 #2
0
ファイル: AppServiceFactory.cs プロジェクト: yuyu2you/Ace
        public virtual T CreateService <T>(bool managed = true) where T : IAppService
        {
            Type t = typeof(T);

            ConstructorInfo c = null;
            bool            injectAppServiceFactoryProvider = false;

            /* List 的查找效率和反射创建对象的性能稍微差点,如有必要,需要优化 */
            _serviceTypes.Find(a =>
            {
                if (a.IsAbstract == true)
                {
                    return(false);
                }

                if (t.IsAssignableFrom(a) == false)
                {
                    return(false);
                }

                c = a.GetConstructor(Type.EmptyTypes);
                injectAppServiceFactoryProvider = false;

                if (c == null)
                {
                    c = a.GetConstructor(InjectConstructorParamTypes);
                    injectAppServiceFactoryProvider = true;
                }

                if (c == null)
                {
                    return(false);
                }

                return(true);
            });

            if (c == null)
            {
                throw new Exception("Can not find the service implementation.");
            }

            T service = default(T);

            if (injectAppServiceFactoryProvider == false)
            {
                service = (T)c.Invoke(EmptyObjects);
                IAppServiceFactoryProvider factoryProvider = service as IAppServiceFactoryProvider;
                if (factoryProvider != null)
                {
                    factoryProvider.ServiceFactory = this;
                }
            }
            else
            {
                service = (T)c.Invoke(new Object[1] {
                    this
                });
            }

            IAceSessionAppService sessionService = service as IAceSessionAppService;

            if (sessionService != null)
            {
                sessionService.AceSession = this.Session;
            }

            if (managed == true)
            {
                this.AttachService(service);
            }

            return(service);

            throw new NotImplementedException();
        }