public void InterceptWithInstanceAndPredicate_InterceptingATransient_ResultsInATransientProxy()
        {
            // Arrange
            var container = new Container();

            var interceptor = new FakeInterceptor();

            container.Register <ICommand, FakeCommand>();

            container.InterceptWith(interceptor, IsACommandPredicate);

            // Act
            var command1 = container.GetInstance <ICommand>();
            var command2 = container.GetInstance <ICommand>();

            // Assert
            Assert.IsFalse(object.ReferenceEquals(command1, command2), "The proxy is expected to " +
                           "be transient, since the interceptee is transient.");
        }
        public void InterceptWithFuncAndPredicate_InterceptingASingleton_ResultsInATransientProxy()
        {
            // Arrange
            var container = new Container();

            var interceptor = new FakeInterceptor();

            container.Register <ICommand, FakeCommand>(Lifestyle.Singleton);

            container.InterceptWith(() => interceptor, IsACommandPredicate);

            // Act
            var command1 = container.GetInstance <ICommand>();
            var command2 = container.GetInstance <ICommand>();

            // Assert
            Assert.IsFalse(object.ReferenceEquals(command1, command2), "The proxy is expected to " +
                           "be transient, since the interceptor is created using a Func<T>, and there is no way to " +
                           "determine whether the delegate always returns the same or a new instance.");
        }
        public void InterceptWithInstanceAndPredicate_InterceptingASingleton_ResultsInASingletonProxy()
        {
            // Arrange
            var container = ContainerFactory.New();

            var interceptor = new FakeInterceptor();

            container.Register <ICommand, FakeCommand>(Lifestyle.Singleton);

            container.InterceptWith(interceptor, IsACommandPredicate);

            // Act
            var command1 = container.GetInstance <ICommand>();
            var command2 = container.GetInstance <ICommand>();

            // Assert
            Assert.IsTrue(object.ReferenceEquals(command1, command2), "The proxy is expected to " +
                          "be singleton, because both the interceptee and the interceptor are singletons, which " +
                          "makes it useless to create a new (expensive) proxy for them on each request.");
        }
        public void InterceptWithFuncAndPredicate_InterceptingASingleton_ResultsInATransientProxy()
        {
            // Arrange
            var container = new Container();

            var interceptor = new FakeInterceptor();

            container.Register<ICommand, FakeCommand>(Lifestyle.Singleton);

            container.InterceptWith(() => interceptor, IsACommandPredicate);

            // Act
            var command1 = container.GetInstance<ICommand>();
            var command2 = container.GetInstance<ICommand>();

            // Assert
            Assert.IsFalse(object.ReferenceEquals(command1, command2), "The proxy is expected to " +
                "be transient, since the interceptor is created using a Func<T>, and there is no way to " +
                "determine whether the delegate always returns the same or a new instance.");
        }
        public void InterceptWithInstanceAndPredicate_InterceptingASingleton_ResultsInASingletonProxy()
        {
            // Arrange
            var container = ContainerFactory.New();

            var interceptor = new FakeInterceptor();

            container.Register<ICommand, FakeCommand>(Lifestyle.Singleton);

            container.InterceptWith(interceptor, IsACommandPredicate);

            // Act
            var command1 = container.GetInstance<ICommand>();
            var command2 = container.GetInstance<ICommand>();

            // Assert
            Assert.IsTrue(object.ReferenceEquals(command1, command2), "The proxy is expected to " +
                "be singleton, because both the interceptee and the interceptor are singletons, which " +
                "makes it useless to create a new (expensive) proxy for them on each request.");
        }
        public void InterceptWithInstanceAndPredicate_InterceptingATransient_ResultsInATransientProxy()
        {
            // Arrange
            var container = new Container();

            var interceptor = new FakeInterceptor();

            container.Register<ICommand, FakeCommand>();

            container.InterceptWith(interceptor, IsACommandPredicate);

            // Act
            var command1 = container.GetInstance<ICommand>();
            var command2 = container.GetInstance<ICommand>();

            // Assert
            Assert.IsFalse(object.ReferenceEquals(command1, command2), "The proxy is expected to " +
                "be transient, since the interceptee is transient.");
        }
 public void Setup()
 {
     _statsDClient = new Mock<IVeStatsDClient>();
     _interceptor = new FakeInterceptor<StatsDTiming>(_statsDClient.Object);
 }
 public void Setup()
 {
     _statsDClient = new Mock <IVeStatsDClient>();
     _interceptor  = new FakeInterceptor <StatsDTiming>(_statsDClient.Object);
 }