When_resolving_services_from_container_SNAP_should_load_dynamicproxygenassebmly2_in_appdomain_only_once() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespaceOf <IBadCode>(); c.Bind <SecondInterceptor>().To <SecondAttribute>(); c.Bind <FirstInterceptor>().To <FirstAttribute>(); c.Bind <HandleErrorInterceptor>().To <HandleErrorAttribute>(); }); container.Container.Register <IOrderedCode, OrderedCode>(); container.Container.Register <IBadCode, BadCode>(); var orderedCode = container.Container.GetInstance <IOrderedCode>(); var badCode = container.Container.GetInstance <IBadCode>(); orderedCode.RunInOrder(); Assert.AreEqual("First", OrderedCode.Actions[1]); Assert.AreEqual("Second", OrderedCode.Actions[0]); Assert.DoesNotThrow(badCode.GiddyUp); var dynamicProxyGenerationAssemblies = AppDomain.CurrentDomain .GetAssemblies() .Where(assembly => assembly.GetName().Name == "DynamicProxyGenAssembly2") .ToList(); Assert.That(dynamicProxyGenerationAssemblies.Count, Is.EqualTo(2)); // both signed and unsigned. Assert.IsNotNull(dynamicProxyGenerationAssemblies.FirstOrDefault(a => a.GetName().GetPublicKey().Length > 0)); Assert.IsNotNull(dynamicProxyGenerationAssemblies.FirstOrDefault(a => a.GetName().GetPublicKey().Length == 0)); }
public void SimpleInjector_Supports_Resolving_Only_Selected_Aspects_From_Container() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests.*"); c.Bind <FirstInterceptor>().To <FirstAttribute>(); c.Bind <SecondInterceptor>().To <SecondAttribute>(); c.Aspects(typeof(FirstInterceptor)).KeepInContainer(); }); container.Container.Register <IOrderedCode, OrderedCode>(); container.Container.RegisterSingle <FirstInterceptor>(new FirstInterceptor("first_kept_in_container")); container.Container.RegisterSingle <SecondInterceptor>(new SecondInterceptor("second_kept_in_container")); var orderedCode = container.Container.GetInstance <IOrderedCode>(); orderedCode.RunInOrder(); // first interceptor is resolved from container, while second one is via new() CollectionAssert.AreEquivalent( OrderedCode.Actions, new[] { "first_kept_in_container", "Second" }); }
public void SimpleInjector_Supports_Types_Without_Interfaces() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests.Fakes*"); c.Bind <HandleErrorInterceptor>().To <HandleErrorAttribute>(); }); container.Container.Register <IDependency, DummyDependency>(); container.Container.Register <TypeWithoutInterface, TypeWithoutInterface>(); container.Container.Register <TypeWithInterfaceInBaseClass, TypeWithInterfaceInBaseClass>(); var typeWithoutInterface = container.Container.GetInstance <TypeWithoutInterface>(); Assert.DoesNotThrow(typeWithoutInterface.Foo); Assert.IsTrue(typeWithoutInterface.GetType().Name.Equals("TypeWithoutInterfaceProxy")); var typeWithInterfaceInBaseClass = container.Container.GetInstance <TypeWithInterfaceInBaseClass>(); Assert.DoesNotThrow(typeWithInterfaceInBaseClass.Foo); Assert.IsTrue(typeWithInterfaceInBaseClass.GetType().Name.Equals("TypeWithInterfaceInBaseClassProxy")); }
public void SimpleInjector_Container_Fails_Without_Match() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("Does.Not.Work"); c.Bind <HandleErrorInterceptor>().To <HandleErrorAttribute> (); }); container.Container.Register <IBadCode, BadCode>(); Assert.Throws <ActivationException>(() => container.Container.GetInstance <IBadCode>()); }
public void SimpleInjector_Container_Allow_Strict_Matching() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests.Fakes.IBadCode"); c.Bind <HandleErrorInterceptor>().To <HandleErrorAttribute> (); }); container.Container.Register <IBadCode, BadCode>(); Assert.DoesNotThrow(() => container.Container.GetInstance <IBadCode>()); }
public void SimpleInjector_Container_Ignores_Types_Without_Decoration() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests*"); c.Bind <HandleErrorInterceptor>().To <HandleErrorAttribute> (); }); container.Container.Register <INotInterceptable, NotInterceptable>(); var code = container.Container.GetInstance <INotInterceptable>(); Assert.IsFalse(code.GetType().Name.Equals("INotInterceptableProxy")); }
public void SimpleInjector_Container_Supports_Method_Aspects() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests*"); c.Bind <HandleErrorInterceptor>().To <HandleErrorAttribute>(); }); container.Container.Register <IBadCode, BadCode>(); var badCode = container.Container.GetInstance <IBadCode>(); Assert.DoesNotThrow(badCode.GiddyUp); Assert.IsTrue(badCode.GetType().Name.Equals("IBadCodeProxy")); }
public void SimpleInjector_Container_Supports_Class_Aspects() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests*"); c.Bind <FourthClassInterceptor>().To <FourthClassAttribute> (); }); container.Container.Register <IOrderedCode, ClassOrderedCode>(); var code = container.Container.GetInstance <IOrderedCode>(); code.RunInOrder(); Assert.AreEqual("Fourth", OrderedCode.Actions[0]); }
public void SimpleInjector_Container_Supports_Multiple_Method_Aspects() { var container = new SimpleInjectorAspectContainer(new Container()); SnapConfiguration.For(container).Configure(c => { c.IncludeNamespace("SnapTests*"); c.Bind <FirstInterceptor>().To <FirstAttribute>(); c.Bind <SecondInterceptor>().To <SecondAttribute>(); }); container.Container.Register <IOrderedCode, OrderedCode>(); var badCode = container.Container.GetInstance <IOrderedCode>(); badCode.RunInOrder(); Assert.AreEqual("First", OrderedCode.Actions[0]); Assert.AreEqual("Second", OrderedCode.Actions[1]); }