public void ExceptionInConstructorIsThrownProperly() { ConstructorInfo constructor = typeof(ThrowsExceptionFromInjectedConstructor).GetConstructor(Type.EmptyTypes); IConstructorInjector injector = Factory.GetInjector(constructor); Assert.That(injector, Is.Not.Null); ThrowsExceptionFromInjectedConstructor mock = injector.Invoke(new object[0]) as ThrowsExceptionFromInjectedConstructor; }
public void ConstructorInjectorCanCreateInstanceOfType() { ConstructorInfo constructor = typeof(ConstructorInvocationObject).GetConstructor(new Type[] { typeof(int) }); IConstructorInjector injector = Factory.GetInjector(constructor); Assert.That(injector, Is.Not.Null); ConstructorInvocationObject mock = injector.Invoke(new object[] { 42 }) as ConstructorInvocationObject; Assert.That(mock, Is.Not.Null); Assert.That(mock.Value, Is.EqualTo(42)); }
/*----------------------------------------------------------------------------------------*/ #region Protected Methods /// <summary> /// Calls the injection constructor defined in the context's activation plan, and returns /// the resulting object. /// </summary> /// <param name="context">The context in which the activation is occurring.</param> /// <returns>The instance of the type.</returns> protected virtual object CallInjectionConstructor(IContext context) { var directive = context.Plan.Directives.GetOne <ConstructorInjectionDirective>(); if (directive == null) { throw new ActivationException(ExceptionFormatter.NoConstructorsAvailable(context)); } // Resolve the dependency markers in the constructor injection directive. object[] arguments = ResolveConstructorArguments(context, directive); // Get an injector that can call the injection constructor. IConstructorInjector injector = context.Binding.Components.InjectorFactory.GetInjector(directive.Member); // Call the constructor and return the created object. return(injector.Invoke(arguments)); }