コード例 #1
0
ファイル: Injector.cs プロジェクト: ChicK00o/suice
 private void RegisterProvider(Type bindedType, Provider provider)
 {
     try {
         providersMap.Add(bindedType, provider);
     } catch (ArgumentException e) {
         throw new DuplicateBindingException(bindedType.FullName, provider.ProvidedType.FullName,
             providersMap[bindedType].ImplementedType.FullName);
     }
 }
コード例 #2
0
ファイル: Injector.cs プロジェクト: ChicK00o/suice
        private void PrepareInstantation(Type type, Provider provider)
        {
            circularDependencyLockedTypes.Add(type);

            InitializeDependencies(provider);

            circularDependencyLockedTypes.Remove(type);
        }
コード例 #3
0
ファイル: Injector.cs プロジェクト: ChicK00o/suice
 private void InitializeDependencies(Provider provider)
 {
     for (int i=0; i < provider.Dependencies.Length; i++) {
         provider.Dependencies[i] = GetDependency(provider.DependencyTypes[i]);
     }
 }
コード例 #4
0
ファイル: Injector.cs プロジェクト: ChicK00o/suice
        private void InitializeAfterInstantiation(Provider provider, object dependency)
        {
            provider.IsInitialized = true;

            InitializeDependencyFields(dependency);

            ProxyInterceptor changeProxyInterceptorTarget;

            if (proxies.TryGetValue(provider.ProvidedType, out changeProxyInterceptorTarget)) {
                changeProxyInterceptorTarget.Initialize(dependency);
            }

            BroadcastDependencyInitialization(dependency);
        }
コード例 #5
0
ファイル: Injector.cs プロジェクト: ChicK00o/suice
        private void CreateDynamicProvider(Type type, out Provider provider)
        {
            Type providedType = type.GetGenericArguments()[0];
            ImplementedBy implementedBy = providedType.GetTypeAttribute<ImplementedBy>();

            Type implementedType = (implementedBy == null)
                ? providedType
                : implementedBy.ImplementedType;

            Type dynamicProviderType = typeof(DynamicProvider<>).MakeGenericType(providedType);
            providersMap.Add(type, provider = (Provider) dynamicProviderType.New(
                providedType,
                implementedType,
                GetDependencyTypes(implementedType)
                ));
        }
コード例 #6
0
ファイル: Injector.cs プロジェクト: ChicK00o/suice
        private object CreateDependency(Type type, Provider provider)
        {
            if (!provider.IsInitialized) {
                PrepareInstantation(type, provider);
            }

            object dependency = provider.Provide();

            if (!provider.IsInitialized || provider is NoScopeProvider) {
                InitializeAfterInstantiation(provider, dependency);
            }
            return dependency;
        }