Example #1
0
        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));
        }
Example #2
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" });
        }
Example #3
0
        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"));
        }
Example #4
0
        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>());
        }
Example #5
0
        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>());
        }
Example #6
0
        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"));
        }
Example #7
0
        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"));
        }
Example #8
0
        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]);
        }
Example #9
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]);
        }