Example #1
0
        /// <summary>
        /// Register instance with service type and service key<br/>
        /// Reuse type is forced to Singleton<br/>
        /// 根据服务类型和服务键注册实例<br/>
        /// 重用类型强制为单例<br/>
        /// </summary>
        public void RegisterInstance(Type serviceType, object instance, object serviceKey)
        {
            var factory     = this.BuildFactory(() => instance, ReuseType.Singleton);
            var factoryData = new ContainerFactoryData(factory, instance.GetType());

            RegisterFactory(serviceType, factoryData, serviceKey);
        }
Example #2
0
        /// <summary>
        /// Register implementation type with service types and service key<br/>
        /// 根据多个服务类型和服务键注册实现类型<br/>
        /// </summary>
        public void RegisterMany(
            IList <Type> serviceTypes, Type implementationType, ReuseType reuseType, object serviceKey)
        {
            var factory     = this.BuildFactory(implementationType, reuseType);
            var factoryData = new ContainerFactoryData(factory, implementationType);

            RegisterFactoryMany(serviceTypes, factoryData, serviceKey);
        }
Example #3
0
        /// <summary>
        /// Register factory with service type and service key<br/>
        /// 根据服务类型和服务键注册工厂函数<br/>
        /// </summary>
        protected void RegisterFactory(
            Type serviceType, ContainerFactoryData factoryData, object serviceKey)
        {
            var key       = Pair.Create(serviceType, serviceKey);
            var factories = Factories.GetOrAdd(
                key, _ => new ConcurrentQueue <ContainerFactoryData>());

            factories.Enqueue(factoryData);
        }
Example #4
0
        /// <summary>
        /// Register delegate with service type and service key<br/>
        /// 根据服务类型和服务键注册工厂函数<br/>
        /// </summary>
        public void RegisterDelegate(
            Type serviceType, Func <object> factory, ReuseType reuseType, object serviceKey)
        {
            factory = this.BuildFactory(factory, reuseType);
            // We can't known what type will be returned, the hint type will be service type
            var factoryData = new ContainerFactoryData(factory, serviceType);

            RegisterFactory(serviceType, factoryData, serviceKey);
        }
Example #5
0
        /// <summary>
        /// Register instance with service type and service key<br/>
        /// Reuse type is forced to Singleton<br/>
        /// 根据服务类型和服务键注册实例<br/>
        /// 重用类型强制为单例<br/>
        /// </summary>
        public void RegisterInstance(Type serviceType, object instance, object serviceKey = null)
        {
            var implementationType = instance.GetType();
            var factoryData        = new ContainerFactoryData(
                (c, s) => instance,
                ReuseType.Singleton,
                implementationType);

            RegisterFactory(serviceType, factoryData, serviceKey);
        }
Example #6
0
        /// <summary>
        /// Register implementation type with service types and service key<br/>
        /// 根据多个服务类型和服务键注册实现类型<br/>
        /// </summary>
        public void RegisterMany(
            IList <Type> serviceTypes, Type implementationType,
            ReuseType reuseType = ReuseType.Transient, object serviceKey = null)
        {
            var factoryData = new ContainerFactoryData(
                ContainerFactoryBuilder.BuildFactory(implementationType),
                reuseType,
                implementationType);

            RegisterFactoryMany(serviceTypes, factoryData, serviceKey);
        }
Example #7
0
 /// <summary>
 /// Register factory with service types and service key<br/>
 /// 根据多个服务类型和服务键注册工厂函数<br/>
 /// </summary>
 protected void RegisterFactoryMany(
     IEnumerable <Type> serviceTypes, ContainerFactoryData factoryData, object serviceKey)
 {
     foreach (var serviceType in serviceTypes)
     {
         var key       = Pair.Create(serviceType, serviceKey);
         var factories = Factories.GetOrAdd(
             key, _ => new ConcurrentQueue <ContainerFactoryData>());
         factories.Enqueue(factoryData);
     }
 }
Example #8
0
        /// <summary>
        /// Register delegate with service type and service key<br/>
        /// 根据服务类型和服务键注册工厂函数<br/>
        /// </summary>
        public void RegisterDelegate(
            Type serviceType, ContainerFactoryDelegate factory,
            ReuseType reuseType = ReuseType.Transient, object serviceKey = null)
        {
            // Since we can't figure out what type will returned from factory,
            // the implementation hint type will be the service type
            var factoryData = new ContainerFactoryData(
                factory,
                reuseType,
                serviceType);

            RegisterFactory(serviceType, factoryData, serviceKey);
        }
Example #9
0
 /// <summary>
 /// Register factory with service type and service key<br/>
 /// 根据服务类型和服务键注册工厂函数<br/>
 /// </summary>
 protected void RegisterFactory(
     Type serviceType, ContainerFactoryData factoryData, object serviceKey)
 {
     FactoriesLock.EnterWriteLock();
     try {
         var key       = Pair.Create(serviceType, serviceKey);
         var factories = Factories.GetOrCreate(key, () => new List <ContainerFactoryData>(1));
         factories.Add(factoryData);
     } finally {
         Interlocked.Increment(ref Revision);
         FactoriesLock.ExitWriteLock();
     }
 }