private void PreDestroy(object instance, IMVCSItemReflectionInfo info) { if (info.PreDestroys.Count == 0) { return; } foreach (var method in info.PreDestroys) { method.Invoke(instance, null); } }
/* * 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); } }
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); } } }
/* * 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); } }