Example #1
0
 private object GetOrCreateService(Dictionary <Type, object> service, Type serviceType,
                                   RegistryService registryService, Type[] genericArgs, List <IDisposable> disposables)
 {
     if (service.TryGetValue(serviceType, out var serviceInstance))
     {
         return(serviceInstance);
     }
     serviceInstance = registryService.ServiceFac(registryService.LifeCycle, genericArgs);
     // if the service implement Idisposable , then add to _disposables list
     if (serviceInstance is IDisposable disposable)
     {
         disposables.Add(disposable);
     }
     service.Add(serviceType, serviceInstance);
     return(serviceInstance);
 }
Example #2
0
        public Container Register(Type from, Type to, LifeCycle lifeCycle)
        {
            // 沒有提供service factory時,自行建立service的instance
            Func <LifeCycle, Type[], object> serviceFac = (_, args) => CreateServiceInstance(to);
            var registryService = new RegistryService(from, lifeCycle, serviceFac);

            if (_registryTable.TryGetValue(from, out RegistryService existedService))
            {
                _registryTable[from] = registryService;
                registryService.Next = existedService;
            }
            else
            {
                _registryTable.Add(from, registryService);
            }
            return(this);
        }
Example #3
0
        public Container Register(Type serviceType, Func <Container, object> service, LifeCycle lifeCycle = LifeCycle.Singleton)
        {
            var registryType = serviceType;
            Func <LifeCycle, Type[], object> serviceFac = (_, args) => service(this);
            var registryService = new RegistryService(registryType, lifeCycle, serviceFac);

            if (_registryTable.TryGetValue(registryType, out RegistryService existedService))
            {
                _registryTable[registryType] = registryService;
                registryService.Next         = existedService;
            }
            else
            {
                _registryTable.Add(registryType, registryService);
            }
            return(this);
        }
Example #4
0
        /// <summary>
        /// register service with given service instance
        /// </summary>
        /// <typeparam name="TFrom">the interface </typeparam>
        /// <typeparam name="Tto"></typeparam>
        /// <param name="service"></param>
        /// <param name="lifeCycle"></param>
        /// <returns></returns>
        public Container Register <TFrom, Tto>(Tto service, LifeCycle lifeCycle = LifeCycle.Singleton)
            where Tto : TFrom
        {
            var registryType = typeof(TFrom);
            Func <LifeCycle, Type[], object> serviceFac = (_, args) => service;
            var registryService = new RegistryService(registryType, lifeCycle, serviceFac);

            if (_registryTable.TryGetValue(registryType, out RegistryService existedService))
            {
                _registryTable[registryType] = registryService;
                registryService.Next         = existedService;
            }
            else
            {
                _registryTable.Add(registryType, registryService);
            }
            return(this);
        }
Example #5
0
        public Container Register <TService>(Func <Container, TService> service, LifeCycle lifeCycle = LifeCycle.Singleton)
        {
            var registryType = typeof(TService);

            // 有service factory時,用提供的factory method去建立方法
            object serviceFac(LifeCycle _, Type[] args) => service(this);

            var registryService = new RegistryService(registryType, lifeCycle, serviceFac);

            if (_registryTable.TryGetValue(registryType, out RegistryService existedService))
            {
                _registryTable[registryType] = registryService;
                registryService.Next         = existedService;
            }
            else
            {
                _registryTable.Add(registryType, registryService);
            }
            return(this);
        }