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); }
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(); }