Esempio n. 1
0
 private void PreDestroy(object instance, IMVCSItemReflectionInfo info)
 {
     if (info.PreDestroys.Count == 0)
     {
         return;
     }
     foreach (var method in info.PreDestroys)
     {
         method.Invoke(instance, null);
     }
 }
Esempio n. 2
0
        /*
         * PostConstructs & PreDestroys.
         */

        private void PostConstruct(object instance, IMVCSItemReflectionInfo info)
        {
            if (info.PostConstructors.Count == 0)
            {
                return;
            }
            foreach (var method in info.PostConstructors)
            {
                method.Invoke(instance, null);
            }
        }
Esempio n. 3
0
        private void UnInject(object instance, IMVCSItemReflectionInfo info)
        {
            foreach (var injection in info.Injections)
            {
                var type    = injection.PropertyInfo.PropertyType;
                var binding = _binder.GetBinding(type);
                if (binding != null)
                {
                    DestroyInjectedValue(instance, binding, injection);
                }

                // No need to reset value type values as it'll be consuming resources.
                if (!type.IsValueType)
                {
                    injection.PropertyInfo.SetValue(instance, null, null);
                }
            }
        }
Esempio n. 4
0
        /*
         * Injections.
         */

        private void Inject(object instance, IMVCSItemReflectionInfo info)
        {
            foreach (var injection in info.Injections)
            {
                var binding = _binder.GetBinding(injection.PropertyInfo.PropertyType);
                if (binding == null)
                {
                    throw new InjectionException(InjectionExceptionType.BindingIsMissing, $"Binding: {injection}", $"Injection target: {instance.GetType().FullName}");
                }

                var value = GetInstance(binding, instance, injection);
                if (!injection.PropertyInfo.PropertyType.IsInstanceOfType(value))
                {
                    throw new InjectionException(InjectionExceptionType.InjectionTypeMismatch, injection, value.GetType().Name);
                }

                injection.PropertyInfo.SetValue(instance, value, null);
            }
        }