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