Exemplo n.º 1
0
        public void PolicyCanChooseNotToGetFromThePool()
        {
            var builder = new ContainerBuilder();

            var returnCalled = false;

            var policy = new CustomPolicy <PooledComponent>(
                (ctxt, param, getCallback) => {
                return(new PooledComponent());
            },
                (instance) =>
            {
                returnCalled = true;
                return(true);
            });

            builder.RegisterType <PooledComponent>().As <IPooledService>().PooledInstancePerLifetimeScope(policy);

            var container = builder.Build();

            IPooledService pooledInstance;

            using (var scope = container.BeginLifetimeScope())
            {
                pooledInstance = scope.Resolve <IPooledService>();

                Assert.Equal(0, pooledInstance.GetCalled);
            }

            Assert.Equal(0, pooledInstance.ReturnCalled);
            Assert.Equal(1, pooledInstance.DisposeCalled);
            Assert.False(returnCalled);

            container.Dispose();
        }
Exemplo n.º 2
0
        public void PolicyIsNotifiedAtCorrectPoints()
        {
            var builder = new ContainerBuilder();

            var events = new List <string>();

            var policy = new CustomPolicy <PooledComponent>(
                (ctxt, param, getCallback) => {
                events.Add("get");
                return(getCallback());
            },
                (instance) =>
            {
                events.Add("return");
                return(true);
            });

            builder.RegisterType <PooledComponent>().As <IPooledService>().PooledInstancePerLifetimeScope(policy);

            var container = builder.Build();

            using (var scope = container.BeginLifetimeScope())
            {
                scope.Resolve <IPooledService>();
            }

            Assert.Equal(new[] { "get", "return" }, events);
        }
Exemplo n.º 3
0
        public void PolicyCanSeeParametersFromThePooledServiceResolve()
        {
            var builder = new ContainerBuilder();

            List <Parameter> policyReceivedParameters = new List <Parameter>();

            var policy = new CustomPolicy <PooledComponent>(
                (ctxt, param, getCallback) => {
                policyReceivedParameters.AddRange(param);

                return(getCallback());
            },
                (instance) =>
            {
                return(false);
            });

            builder.RegisterType <PooledComponent>().As <IPooledService>().PooledInstancePerLifetimeScope(policy);

            var container = builder.Build();

            IPooledService pooledInstance;

            using (var scope = container.BeginLifetimeScope())
            {
                pooledInstance = scope.Resolve <IPooledService>(new NamedParameter("Val1", 123), new TypedParameter(typeof(int), 456));
            }

            Assert.Collection(policyReceivedParameters,
                              p =>
            {
                Assert.Equal("Val1", (p as NamedParameter)?.Name);
            },
                              p =>
            {
                Assert.Equal(456, (p as TypedParameter)?.Value);
            });

            container.Dispose();
        }