public void CanAddExtensionWithNonDefaultConstructor()
 {
     IUnityContainer container = new UnityContainer();
     container.AddNewExtension<ContainerExtensionWithNonDefaultConstructor>();
     var extension = container.Configure(typeof (ContainerExtensionWithNonDefaultConstructor));
     Assert.IsNotNull(extension);
 }
Beispiel #2
0
        public void CanUseContainerToResolveFactoryParameters()
        {
            bool factoryWasCalled = false;
            string connectionString = "Northwind";

            IUnityContainer container = new UnityContainer();

            container.AddNewExtension<StaticFactoryExtension>()
                .Configure<IStaticFactoryConfiguration>()
                    .RegisterFactory<MockDatabase>(c =>
                    {
                        Assert.AreSame(container, c);
                        factoryWasCalled = true;
                        string cs = c.Resolve<string>("connectionString");
                        return MockDatabase.Create(cs);
                    })
                    .Container
                .RegisterInstance<string>("connectionString", connectionString);

            MockDatabase db = container.Resolve<MockDatabase>();

            Assert.IsTrue(factoryWasCalled);
            Assert.IsNotNull(db);
            Assert.AreEqual(connectionString, db.ConnectionString);
        }
        public void CanConfigureRemotingInterceptionOnInterface()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container.Configure<Interception>().SetInterceptorFor<Interface>(new TransparentProxyInterceptor());
        }
        public void CanSetUpAPolicyWithExternallyConfiguredRulesAndHandlers()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container
                .Configure<Interception>()
                    .AddPolicy("policy1")
                        .AddMatchingRule("rule1")
                        .AddCallHandler("handler1")
                        .AddCallHandler("handler2").Interception.Container
                .RegisterType<IMatchingRule, AlwaysMatchingRule>("rule1")
                .RegisterType<ICallHandler, GlobalCountCallHandler>(
                    "handler1",
                    new InjectionConstructor("handler1"))
                .RegisterType<ICallHandler, GlobalCountCallHandler>(
                    "handler2",
                    new InjectionConstructor("handler2"),
                    new InjectionProperty("Order", 10));

            GlobalCountCallHandler.Calls.Clear();

            container
                .Configure<Interception>()
                    .SetInterceptorFor<Wrappable>("wrappable", new VirtualMethodInterceptor());

            Wrappable wrappable1 = container.Resolve<Wrappable>("wrappable");
            wrappable1.Method2();

            Assert.AreEqual(1, GlobalCountCallHandler.Calls["handler1"]);
            Assert.AreEqual(1, GlobalCountCallHandler.Calls["handler2"]);
        }
        public void CanConfigureDefaultRemotingInterceptionOnMBRO()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container.Configure<Interception>()
                .SetDefaultInterceptorFor<Wrappable>(new TransparentProxyInterceptor());
        }
Beispiel #6
0
        public void CanInterceptGenericMethodWithHandlerAttributeThroughInterface()
        {
            var container = new UnityContainer();
            container.AddNewExtension<Interception>();
            container.RegisterType<IInterfaceWithGenericMethod, ClassWithGenericMethod>(
                new Interceptor(new TransparentProxyInterceptor()));

            var instance = container.Resolve<IInterfaceWithGenericMethod>();

            var result = instance.DoSomething<int>();

            Assert.AreEqual(0, result);
        }
        public void CanInterceptGenericMethodWithHandlerAttributeThroughInterface()
        {
            IUnityContainer container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.RegisterType <IInterfaceWithGenericMethod, ClassWithGenericMethod>(
                new Interceptor(new TransparentProxyInterceptor()));

            var instance = container.Resolve <IInterfaceWithGenericMethod>();

            var result = instance.DoSomething <int>();

            Assert.AreEqual(0, result);
        }
        public void ChildContainerLazyEnumerable()
        {
            using (var root = new UnityContainer())
            {
                root.AddNewExtension <EnumerableExtension>();

                RegisterEnumerable(root, true);

                using (var child = root.CreateChildContainer())
                {
                    AssertEnumerable(child, true, true);
                }
            }
        }
Beispiel #9
0
        /// <summary>
        /// 虚方法代理,这个方法不会生成代理类,而是生成派生类
        /// </summary>
        static void VirtualMethodInterception()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.RegisterType <ICar, Ford>(
                new Interceptor <VirtualMethodInterceptor>(),
                new InterceptionBehavior <LoggingInterceptionBehavior>());
            var driver = container.Resolve <Driver>();

            driver.RunCar();
            driver.RunCar2(); // 虚方法代理生成的是派生类,所以可以通过 as Ford 转型。
            driver.RunCar3();
        }
Beispiel #10
0
        static void Main(string[] args)
        {
            var current = new UnityContainer();

            current.AddNewExtension <Interception>();
            current.RegisterType <IOrderService, OrderService>()
            .Configure <Interception>()
            .SetInterceptorFor <IOrderService>(new InterfaceInterceptor());
            var orderService = current.Resolve <IOrderService>();

            Console.WriteLine(orderService.GetOrder());
            Console.WriteLine(orderService.GetOrderDetail());
            Console.ReadKey();
        }
Beispiel #11
0
        public void UnityCanResolveCompositionContainerTest()
        {
            // Setup
            var unityContainer  = new UnityContainer();
            var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());

            // Add composition support for unity
            unityContainer.AddNewExtension <CompositionIntegration>();
            unityContainer.Configure <CompositionIntegration>().Catalogs.Add(assemblyCatalog);

            var compositionContainer = unityContainer.Resolve <CompositionContainer>();

            Assert.That(compositionContainer, Is.Not.Null);
        }
        public void ConfigureContainerReturnEmptyIfNoInterception()
        {
            ICallHandler  myHandler1      = new CallCountHandler();
            IMatchingRule myMatchingRule1 = new AlwaysMatchingRule();

            IUnityContainer container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.Configure <Interception>().
            AddPolicy("myRDP").
            AddCallHandler(myHandler1).
            AddMatchingRule(myMatchingRule1);
            Assert.AreEqual(0, ((CallCountHandler)myHandler1).CallCount);
        }
        public void SettingUpRuleWithEmptyNameThrows()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            try
            {
                container.Configure<Interception>().AddPolicy(string.Empty);
                Assert.Fail("should have thrown");
            }
            catch (ArgumentException)
            {
            }
        }
Beispiel #14
0
        /// <summary>
        ///     Inject
        /// </summary>
        /// <returns></returns>
        private static IUnityContainer BuildUnityContainer(UnityContainer container)
        {
            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // Database context, one per request, ensure it is disposed
            container.BindInRequestScope <IMvcForumContext, MvcForumContext>();


            // Quartz
            container.AddNewExtension <QuartzUnityExtension>();

            //Bind the various domain model services and repositories that e.g. our controllers require
            container.BindInRequestScope <IRoleService, RoleService>();
            container.BindInRequestScope <ICategoryService, CategoryService>();
            container.BindInRequestScope <IMembershipService, MembershipService>();
            container.BindInRequestScope <IPermissionService, PermissionService>();
            container.BindInRequestScope <ISettingsService, SettingsService>();
            container.BindInRequestScope <ITopicService, TopicService>();
            container.BindInRequestScope <ITopicTagService, TopicTagService>();
            container.BindInRequestScope <IPostService, PostService>();
            container.BindInRequestScope <ILocalizationService, LocalizationService>();
            container.BindInRequestScope <IVoteService, VoteService>();
            container.BindInRequestScope <IBadgeService, BadgeService>();
            container.BindInRequestScope <IMembershipUserPointsService, MembershipUserPointsService>();
            container.BindInRequestScope <ICategoryPermissionForRoleService, CategoryPermissionForRoleService>();
            container.BindInRequestScope <ICategoryNotificationService, CategoryNotificationService>();
            container.BindInRequestScope <ITopicNotificationService, TopicNotificationService>();
            container.BindInRequestScope <IPrivateMessageService, PrivateMessageService>();
            container.BindInRequestScope <ILoggingService, LoggingService>();
            container.BindInRequestScope <IEmailService, EmailService>();
            container.BindInRequestScope <IReportService, ReportService>();
            container.BindInRequestScope <IActivityService, ActivityService>();
            container.BindInRequestScope <IPollService, PollService>();
            container.BindInRequestScope <IPollVoteService, PollVoteService>();
            container.BindInRequestScope <IPollAnswerService, PollAnswerService>();
            container.BindInRequestScope <IBannedEmailService, BannedEmailService>();
            container.BindInRequestScope <IBannedWordService, BannedWordService>();
            container.BindInRequestScope <IUploadedFileService, UploadedFileService>();
            container.BindInRequestScope <IFavouriteService, FavouriteService>();
            container.BindInRequestScope <IGlobalPermissionForRoleService, GlobalPermissionForRoleService>();
            container.BindInRequestScope <ICacheService, CacheService>();
            container.BindInRequestScope <ITagNotificationService, TagNotificationService>();
            container.BindInRequestScope <IReflectionService, ReflectionService>();
            container.BindInRequestScope <IBlockService, BlockService>();
            container.BindInRequestScope <IConfigService, ConfigService>();
            container.BindInRequestScope <IPostEditService, PostEditService>();

            return(container);
        }
Beispiel #15
0
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // e.g. container.RegisterType<ITestService, TestService>();
            container.RegisterType <ICustomerManager, CustomerManager>();
            container.RegisterType <IMechanicmanager, MechanicManager>();
            container.RegisterType <IDealerManager, DealerManager>();
            container.RegisterType <IVehicleManager, VehicleManager>();
            container.AddNewExtension <UnityHelperRepository>();
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));
        }
Beispiel #16
0
        public void UnityCannotResolveMultipleMefInstancesTest()
        {
            // Setup
            var unityContainer  = new UnityContainer();
            var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());

            // Add composition support for unity
            unityContainer.AddNewExtension <CompositionIntegration>();
            unityContainer.Configure <CompositionIntegration>().Catalogs.Add(assemblyCatalog);

            Assert.That(delegate
            {
                unityContainer.Resolve <IMultipleMefComponent>();
            }, Throws.TypeOf <ResolutionFailedException>());
        }
Beispiel #17
0
        public void BaseInterceptionBehaviorInvokeTest()
        {
            //Arrange
            var container = new UnityContainer();

            container.AddNewExtension <unity.Interception>();
            container.RegisterType <IInterceptionBehavior, BaseInterceptionBehavior>("BaseInterceptionBehavior",
                                                                                     new Interceptor <InterfaceInterceptor>(), new InterceptionBehavior <BaseInterceptionBehavior>());

            //Act
            var target = container.Resolve <IInterceptionBehavior>("BaseInterceptionBehavior");

            //Assert
            Assert.IsTrue(target.WillExecute);
        }
Beispiel #18
0
        static void InterfaceInterception()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>(); //
            container.RegisterType <ICar, Ford>(
                new Interceptor <InterfaceInterceptor>(),
                new InterceptionBehavior <LoggingInterceptionBehavior>()
                /*,new InterceptionBehavior<CacheInterceptionBehavior>()*/); // 可以添加多个拦截器
            var driver = container.Resolve <Driver>();

            driver.RunCar();  // 这里打印出来的类名会是生成的代理类
            driver.RunCar2(); // 接口代理生成的代理类不是派生类,所以不能通过 as Ford 转型
            driver.RunCar3();
        }
Beispiel #19
0
        public void SettingUpRuleWithEmptyNameThrows()
        {
            IUnityContainer container = new UnityContainer();

            container.AddNewExtension <Interception>();

            try
            {
                container.Configure <Interception>().AddPolicy(string.Empty);
                Assert.Fail("should have thrown");
            }
            catch (ArgumentException)
            {
            }
        }
Beispiel #20
0
    static void Main(string[] args)
    {
        IUnityContainer container = new UnityContainer();

        container.AddNewExtension <Interception>();
        container.RegisterType <ValidationHandler>(new ContainerControlledLifetimeManager());
        container.RegisterType <TransactionHandler>(new ContainerControlledLifetimeManager());
        container.RegisterType <NotifyHandler>(new ContainerControlledLifetimeManager());
        container.RegisterType <TestClass>(
            new InterceptionBehavior <PolicyInjectionBehavior>(),
            new Interceptor <VirtualMethodInterceptor>());
        var testClass = container.Resolve <TestClass>();

        testClass.TestProperty = 5;
    }
Beispiel #21
0
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // e.g. container.RegisterType<ITestService, TestService>();
            container.RegisterType <IHotelManager, HotelManager>();
            container.RegisterType <IBookingManager, BookingManager>();
            container.RegisterType <IRoomManager, RoomManager>();
            container.AddNewExtension <BLL.Helper.UnityRepositoryHelper>();

            GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
        }
Beispiel #22
0
        private void InitializeContainer()
        {
            if (AppArguments.Instance.IsDebugMode)
            {
                container.RegisterType <IConfigProvider, PoeEyeConfigProviderInMemory>();
            }
            else
            {
                container.RegisterType <IConfigProvider, ConfigProviderFromFile>();
            }

            container.AddNewExtension <Diagnostic>();
            container.AddNewExtension <CommonRegistrations>();
            container.AddNewExtension <NativeRegistrations>();
            container.AddNewExtension <WpfCommonRegistrations>();
            container.AddNewExtension <UpdaterRegistrations>();

            container.RegisterType <IMicrophoneControllerEx, ComplexMicrophoneController>();
            container.RegisterSingleton <IMicrophoneProvider, MicrophoneProvider>();
            container.RegisterSingleton <IMicSwitchOverlayViewModel, MicSwitchOverlayViewModel>();
            container.RegisterSingleton <IComplexHotkeyTracker, ComplexHotkeyTracker>();
            container.RegisterSingleton <IMainWindowViewModel, MainWindowViewModel>();
            container.RegisterSingleton <IImageProvider, ImageProvider>();
        }
        public void TraceIdentityBehaviorInvokeWithExceptionTest()
        {
            //Arrange
            var container = new UnityContainer();

            container.AddNewExtension <Microsoft.Practices.Unity.InterceptionExtension.Interception>();
            container.RegisterInstance(typeof(ILogger), _logger);
            container.RegisterType <ITestService, TestServiceMock>(
                new Interceptor <InterfaceInterceptor>(), new InterceptionBehavior <TraceIdentityBehavior>());

            //Act
            var target = container.Resolve <ITestService>();

            target.GetWithException();
        }
        public void Defaults()
        {
            // Setup
            var container = new UnityContainer();

            // Act
            container.AddNewExtension <DefaultLifetime>();
            var config = container.Configure <DefaultLifetime>();

            // Validate
            Assert.IsNotNull(config);
            Assert.IsInstanceOfType(config.TypeDefaultLifetime, typeof(TransientLifetimeManager));
            Assert.IsInstanceOfType(config.InstanceDefaultLifetime, typeof(ContainerControlledLifetimeManager));
            Assert.IsInstanceOfType(config.FactoryDefaultLifetime, typeof(TransientLifetimeManager));
        }
Beispiel #25
0
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            container.RegisterType <IUser, UserManager>();
            container.RegisterType <IVehicle, VehicleManager>();
            container.RegisterType <IService, ServiceManager>();
            container.RegisterType <IDealer, DealerManager>();
            container.RegisterType <IMechanic, MechanicManager>();
            container.RegisterType <ICustomer, CustomerManager>();
            container.RegisterType <IBooking, BookingManager>();
            container.AddNewExtension <UnityRepositoryHelper>();

            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }
Beispiel #26
0
        public static void Show()
        {
            IUnityContainer container = new UnityContainer();

            container.RegisterType <IUserProcessor, UserProcessor>();//声明UnityContainer并注册IUserProcessor
            container.AddNewExtension <Interception>().Configure <Interception>().SetInterceptorFor <IUserProcessor>(new InterfaceInterceptor());
            User user = new User()
            {
                Id = 12, Name = "wangjie", Password = "******"
            };
            IUserProcessor userprocessor = container.Resolve <IUserProcessor>();

            userprocessor.RegUser(user);//调用
            //userprocessor.GetUser(user);
        }
        private IUnityContainer GetConfiguredContainer()
        {
            callHandler = new PerformanceCounterCallHandler(TestCategoryName, TestInstanceName);

            IUnityContainer container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.Configure <Interception>()
            .AddPolicy("Monitor all methods")
            .AddMatchingRule(new TypeMatchingRule(typeof(MonitorTarget)))
            .AddCallHandler(callHandler).Interception
            .SetDefaultInterceptorFor <MonitorTarget>(new TransparentProxyInterceptor());

            return(container);
        }
        public void UnregisteredGenericParent_Test()
        {
            var container = new UnityContainer();

            container.AddNewExtension <DisposableStrategyExtension>();

            var obj1 = container.Resolve <GenericClass <SimpleClass> >();
            var obj2 = container.Resolve <GenericClass <DisposableClass> >();

            Assert.AreNotEqual(obj1, obj2);

            container.Teardown(obj1);
            container.Teardown(obj2);
            Assert.IsFalse(obj2.Property.Disposed);
        }
Beispiel #29
0
        public static IUnityContainer RegisterComponents()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();

            var interceptor = new Interceptor <InterfaceInterceptor>();
            var behaver     = new InterceptionBehavior <LoggingInterceptionBehavior>();

            container.RegisterType <DbContext, DatabaseContext>(new HierarchicalLifetimeManager());

            container.RegisterType(typeof(IRepository <>), typeof(EfRepository <>));

            return(container);
        }
Beispiel #30
0
        public void TestAllInStepScope()
        {
            IUnityContainer container = new UnityContainer();

            container.AddNewExtension <StepScopeExtension>();
            container.RegisterStepScope <A>("a", new InjectionConstructor(new ResolvedParameter <B>("i")));
            container.RegisterStepScope <B>("i");

            StepSynchronizationManager.Register(_stepExecution);

            var a = container.Resolve <A>("a");

            Assert.IsNotNull(a.I);
            Assert.IsFalse(a.I is IProxyObject);
        }
Beispiel #31
0
        public void AttributeDrivenPolicyIsAddedByDefault()
        {
            GlobalCountCallHandler.Calls.Clear();

            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();
            container.RegisterType<Interface, WrappableThroughInterfaceWithAttributes>(
                new Interceptor<InterfaceInterceptor>(),
                new InterceptionBehavior<PolicyInjectionBehavior>());

            Interface wrappedOverInterface = container.Resolve<Interface>();
            wrappedOverInterface.Method();

            Assert.AreEqual(1, GlobalCountCallHandler.Calls["WrappableThroughInterfaceWithAttributes-Method"]);
        }
Beispiel #32
0
        public static void RegisterComponents()
        {
            var container = new UnityContainer();


            container.AddNewExtension <Interception>();

            container.RegisterType <IHotelesService, HotelesService>(new Interceptor <InterfaceInterceptor>(), new InterceptionBehavior <DBInterceptor>());
            container.RegisterType <IHotelesRepository, HotelesRepository>();

            container.RegisterType <IReservasService, ReservasService>(new Interceptor <InterfaceInterceptor>(), new InterceptionBehavior <DBInterceptor>());
            container.RegisterType <IReservasRepository, ReservasRepository>();

            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }
Beispiel #33
0
        public void unitycontainer_interception_162()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.RegisterType <IMyClass, MyClass>(new ContainerControlledLifetimeManager(),
                                                       new Interceptor <InterfaceInterceptor>(),
                                                       new InterceptionBehavior <LoggingInterceptionBehavior>());

            var class1 = container.Resolve <IMyClass>();
            var class2 = container.Resolve <IMyClass>();

            class1.MyFunction();
            class2.MyFunction();
        }
Beispiel #34
0
        public void SimpleInterception()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.RegisterType <IDependee, Dependee>(
                new Interceptor <InterfaceInterceptor>(),
                new InterceptionBehavior <LoggingAspect>(),
                new InjectionProperty(nameof(IDependee.Dependency)));
            container.RegisterType <IDependency, Dependency>();

            var dependee = container.Resolve <IDependee>();

            Assert.IsNotNull(dependee);
            Assert.IsNotNull(dependee.Dependency);
        }
Beispiel #35
0
        static public IUnityContainer UnityContainerFactory()
        {
            IUnityContainer container = new UnityContainer();

            container.RegisterInstance <IPerformanceCounterService>(new PerformanceCounterService {
                Category = FTPFolder.PerfofmanceCounterCategory
            })
            .RegisterInstance <IFTPFolder>(new FTPFolder());
            container.AddNewExtension <Interception>()
            .Configure <Interception>()
            .SetInterceptorFor <IFTPFolder>(new InterfaceInterceptor());

            PerformanceCounterInstall.CreateCounters(typeof(FTPFolder), Assembly.GetAssembly(typeof(FTPClient)), FTPFile.PerfofmanceCounterCategory);

            return(container);
        }
Beispiel #36
0
        static void Main(string[] args)
        {
            var uc = new UnityContainer();

            uc.AddNewExtension <BrokerExtension>();

            var p = uc.Resolve <FootballPlayer>();

            p.Name = "Maradona";
            var c = uc.Resolve <FootballCoach>();

            p.Score();
            p.Score();

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            UnityContainer container = new UnityContainer();

            container.AddNewExtension <Interception>();
            container.RegisterType <ISomeObject, SomeObject>(
                new Interceptor <TransparentProxyInterceptor>(),
                new InterceptionBehavior <SetterCallsFilterMethodBehavior>());

            // we must get our instance from unity for interception to occur
            ISomeObject myObject = container.Resolve <ISomeObject>();

            myObject.SomeProperty = "Hello Setter";

            Console.ReadLine();
        }
        public void ConfiguringDefaultRemotingInterceptionOnNonMBROTypeThrows()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            try
            {
                container.Configure<Interception>()
                    .SetDefaultInterceptorFor<WrappableThroughInterface>(new TransparentProxyInterceptor());
                Assert.Fail("Call to SetInjectorFor<T>() should have thrown");
            }
            catch (ArgumentException)
            {
                // expected exception
            }
        }
Beispiel #39
0
        public void Unity_Interceptor_By_ContextBoundObject_Test()
        {
            using (IUnityContainer container = new UnityContainer())
            {
                container.AddNewExtension <Interception>();
                container.RegisterType <MockClassForContextboundObject>(
                    new Interceptor <TransparentProxyInterceptor>(),
                    new InterceptionBehavior <MockClassForContextboundObjectBehavior>());

                var obj = container.Resolve <MockClassForContextboundObject>();
                obj.Say();
                obj.Say();
                obj.Say2();
                obj.Say2();
            }
        }
        public void CanSetUpInterceptorThroughInjectionMemberForExistingInterceptor()
        {
            CallCountInterceptionBehavior interceptionBehavior = new CallCountInterceptionBehavior();

            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container.RegisterType<IInterface, BaseClass>(
                "test",
                new Interceptor<InterfaceInterceptor>(),
                new InterceptionBehavior(interceptionBehavior));

            IInterface instance = container.Resolve<IInterface>("test");

            instance.DoSomething("1");

            Assert.AreEqual(1, interceptionBehavior.CallCount);
        }
        public void CanSetUpAnEmptyRule()
        {
            // there is no visible effect for this, but it should still be resolved.
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            // empty
            container
                .Configure<Interception>()
                    .AddPolicy("policy1");

            List<InjectionPolicy> policies
                = new List<InjectionPolicy>(container.ResolveAll<InjectionPolicy>());

            Assert.AreEqual(2, policies.Count);
            Assert.IsInstanceOfType(policies[0], typeof(AttributeDrivenPolicy));
            Assert.IsInstanceOfType(policies[1], typeof(RuleDrivenPolicy));
            Assert.AreEqual("policy1", policies[1].Name);
        }
        public void CanSetUpAdditionalInterfaceThroughInjectionMemberForInstanceInterception()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            int invokeCount = 0;

            container.RegisterType<IInterface, BaseClass>(
                "test",
                new Interceptor<InterfaceInterceptor>(),
                new AdditionalInterface(typeof(IOtherInterface)),
                new InterceptionBehavior(
                    new DelegateInterceptionBehavior(
                        (mi, gn) => { invokeCount++; return mi.CreateMethodReturn(0); })));

            IInterface instance = container.Resolve<IInterface>("test");

            ((IOtherInterface)instance).DoSomethingElse("1");

            Assert.AreEqual(1, invokeCount);
        }
        public void CanSetUpInterceptorThroughInjectionMember()
        {
            CallCountHandler handler = new CallCountHandler();

            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();
            container.Configure<Interception>()
                .AddPolicy("policy")
                    .AddMatchingRule<AlwaysMatchingRule>()
                    .AddCallHandler(handler);

            container.RegisterType<IInterface, BaseClass>(
                "test",
                new Interceptor<InterfaceInterceptor>(),
                new InterceptionBehavior<PolicyInjectionBehavior>());

            IInterface instance = container.Resolve<IInterface>("test");

            instance.DoSomething("1");

            Assert.AreEqual(1, handler.CallCount);
        }
        public void CanSetUpAPolicyWithGivenRulesAndHandlers()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            IMatchingRule rule1 = new AlwaysMatchingRule();
            ICallHandler handler1 = new CallCountHandler();

            container
                .Configure<Interception>()
                    .AddPolicy("policy1")
                        .AddMatchingRule(rule1)
                        .AddCallHandler(handler1);

            container
                .Configure<Interception>()
                    .SetInterceptorFor<Wrappable>("wrappable", new VirtualMethodInterceptor());

            Wrappable wrappable1 = container.Resolve<Wrappable>("wrappable");
            wrappable1.Method2();

            Assert.AreEqual(1, ((CallCountHandler)handler1).CallCount);
        }
        public void SettingUpAPolicyWithANullRuleElementThrows()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            try
            {
                container
                    .Configure<Interception>()
                        .AddPolicy("policy1")
                            .AddMatchingRule(typeof(AlwaysMatchingRule))
                            .AddMatchingRule((string)null)
                            .AddCallHandler(new CallCountHandler());
                Assert.Fail("Should have thrown");
            }
            catch (ArgumentException)
            {
            }
        }
        public void CanSetUpAPolicyWithLifetimeManagedNamedInjectedRulesAndHandlers()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container
                .Configure<Interception>()
                    .AddPolicy("policy1")
                        .AddMatchingRule<AlwaysMatchingRule>(
                            "rule1",
                            new ContainerControlledLifetimeManager())
                        .AddCallHandler<CallCountHandler>(
                            "handler1",
                            (LifetimeManager)null)
                        .AddCallHandler<CallCountHandler>(
                            "handler2",
                            new ContainerControlledLifetimeManager(),
                            new InjectionProperty("Order", 10));

            GlobalCountCallHandler.Calls.Clear();

            container
                .Configure<Interception>()
                    .SetInterceptorFor<Wrappable>("wrappable", new TransparentProxyInterceptor());

            Wrappable wrappable1 = container.Resolve<Wrappable>("wrappable");
            wrappable1.Method2();

            CallCountHandler handler1 = (CallCountHandler)container.Resolve<ICallHandler>("handler1");
            CallCountHandler handler2 = (CallCountHandler)container.Resolve<ICallHandler>("handler2");

            Assert.AreEqual(0, handler1.CallCount);     // not lifetime maanaged
            Assert.AreEqual(1, handler2.CallCount);     // lifetime managed
        }
        public void CanSetUpAPolicyWithNamedInjectedRulesAndHandlers()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container
                .Configure<Interception>()
                    .AddPolicy("policy1")
                        .AddMatchingRule<AlwaysMatchingRule>("rule1")
                        .AddCallHandler<GlobalCountCallHandler>(
                            "handler1",
                            new InjectionConstructor("handler1"))
                        .AddCallHandler<GlobalCountCallHandler>(
                            "handler2",
                            new InjectionConstructor("handler2"),
                            new InjectionProperty("Order", 10));

            GlobalCountCallHandler.Calls.Clear();

            container
                .Configure<Interception>()
                    .SetInterceptorFor<Wrappable>("wrappable", new TransparentProxyInterceptor());

            Wrappable wrappable1 = container.Resolve<Wrappable>("wrappable");
            wrappable1.Method2();

            GlobalCountCallHandler handler1 = (GlobalCountCallHandler)container.Resolve<ICallHandler>("handler1");
            GlobalCountCallHandler handler2 = (GlobalCountCallHandler)container.Resolve<ICallHandler>("handler2");

            Assert.AreEqual(1, GlobalCountCallHandler.Calls["handler1"]);
            Assert.AreEqual(1, GlobalCountCallHandler.Calls["handler2"]);
            Assert.AreEqual(0, handler1.Order);
            Assert.AreEqual(10, handler2.Order);
        }
        public void CanSetUpAPolicyWithGivenRulesAndHandlersTypesWithGenerics()
        {
            IUnityContainer container = new UnityContainer();
            container.AddNewExtension<Interception>();

            container
                .Configure<Interception>()
                    .AddPolicy("policy1")
                        .AddMatchingRule<AlwaysMatchingRule>()
                        .AddCallHandler<GlobalCountCallHandler>();

            GlobalCountCallHandler.Calls.Clear();

            container
                .Configure<Interception>()
                    .SetInterceptorFor<Wrappable>("wrappable", new TransparentProxyInterceptor());

            Wrappable wrappable1 = container.Resolve<Wrappable>("wrappable");
            wrappable1.Method2();

            Assert.AreEqual(1, GlobalCountCallHandler.Calls["default"]);
        }
Beispiel #49
0
        private IUnityContainer CreateContainer(string globalCallHandlerName)
        {
            IUnityContainer container = new UnityContainer();

            container.AddNewExtension<Interception>();

            container.RegisterInstance<IMatchingRule>(
                "alwaystrue",
                new AlwaysMatchingRule());
            container.RegisterInstance<ICallHandler>(
                "globalCountHandler",
                new GlobalCountCallHandler(globalCallHandlerName));

            container.Configure<Interception>()
                .AddPolicy("policy")
                    .AddMatchingRule("alwaystrue")
                    .AddCallHandler("globalCountHandler");

            return container;
        }
        public void CanInterceptMBROWithDependencyOnOtherMBRO()
        {
            GlobalCountCallHandler.Calls.Clear();

            IUnityContainer container = new UnityContainer();

            container.AddNewExtension<Interception>();

            container
                .RegisterInstance<IMatchingRule>(
                    "parentRule",
                    new TypeMatchingRule(typeof(WrappableWithProperty)))
                .RegisterInstance<IMatchingRule>(
                    "childRule",
                    new TypeMatchingRule(typeof(Wrappable)))
                .RegisterInstance<ICallHandler>(
                    "parentCallHandler",
                    new GlobalCountCallHandler("parent"))
                .RegisterInstance<ICallHandler>(
                    "childCallHandler",
                    new GlobalCountCallHandler("child"))
                .RegisterType<InjectionPolicy, RuleDrivenPolicy>("parentPolicy",
                    new InjectionConstructor(
                        new ResolvedArrayParameter<IMatchingRule>(
                            new ResolvedParameter<IMatchingRule>("parentRule")),
                        new string[] { "parentCallHandler" }))
                .RegisterType<InjectionPolicy, RuleDrivenPolicy>("childPolicy",
                    new InjectionConstructor(
                        new ResolvedArrayParameter<IMatchingRule>(
                            new ResolvedParameter<IMatchingRule>("childRule")),
                        new string[] { "childCallHandler" }))
                .RegisterType<WrappableWithProperty>(new InjectionProperty("Wrappable"))
                .Configure<Interception>()
                    .SetDefaultInterceptorFor<WrappableWithProperty>(new TransparentProxyInterceptor())
                    .SetDefaultInterceptorFor<Wrappable>(new TransparentProxyInterceptor());

            WrappableWithProperty instance = container.Resolve<WrappableWithProperty>();

            instance.Method();
            Assert.AreEqual(1, GlobalCountCallHandler.Calls["parent"]); // method

            instance.Wrappable.Method();
            Assert.AreEqual(2, GlobalCountCallHandler.Calls["parent"]); // method and getter
            Assert.AreEqual(1, GlobalCountCallHandler.Calls["child"]);
        }
        public void FactoryRecievesCurrentContainerWhenUsingChild()
        {
            IUnityContainer parent = new UnityContainer();

            IUnityContainer child = parent.CreateChildContainer();

            parent
                .AddNewExtension<StaticFactoryExtension>()
                .Configure<StaticFactoryExtension>()
                .RegisterFactory<MockDatabase>(
                c =>
                    {
                        Assert.AreSame(child, c);
                        return MockDatabase.Create("connectionString");
                    });

             var db = child.Resolve<MockDatabase>();
        }
        private IUnityContainer CreateContainer(string globalCallHandlerName)
        {
            IUnityContainer container = new UnityContainer();

            container.AddNewExtension<Interception>();

            container.RegisterInstance<IMatchingRule>(
                "alwaystrue",
                new AlwaysMatchingRule());
            container.RegisterInstance<ICallHandler>(
                "globalCountHandler",
                new GlobalCountCallHandler(globalCallHandlerName));

            container
                .RegisterType<InjectionPolicy, RuleDrivenPolicy>("policy",
                    new InjectionConstructor(
                        new ResolvedArrayParameter<IMatchingRule>(
                            new ResolvedParameter<IMatchingRule>("alwaystrue")),
                        new string[] { "globalCountHandler" }));

            return container;
        }