Beispiel #1
0
        public void registering_instances_in_different_scopes_results_in_each_consumer_getting_the_correct_registration()
        {
            var objectForScope1 = new TheClass();
            var objectForScope2 = new TheClass();
            var scope1          = new AmbientContext();
            var scope2          = new AmbientContext();

            Resolver.AddDependency <IContextStore, AmbientContextStore>();

            IDisposable scope1Request, scope2Request;

            using (new ContextScope(scope1))
            {
                scope1Request = Resolver.CreateRequestScope();
                Resolver.AddDependencyInstance <TheClass>(objectForScope1, DependencyLifetime.PerRequest);
            }

            using (new ContextScope(scope2))
            {
                scope2Request = Resolver.CreateRequestScope();
                Resolver.AddDependencyInstance <TheClass>(objectForScope2, DependencyLifetime.PerRequest);
            }

            using (new ContextScope(scope1))
            {
                Resolver.Resolve <TheClass>().ShouldBeSameAs(objectForScope1);
            }
            using (new ContextScope(scope2))
            {
                Resolver.Resolve <TheClass>().ShouldBeSameAs(objectForScope2);
            }
        }
Beispiel #2
0
        registering_instances_in_different_scopes_results_in_only_the_context_specific_registrations_to_be_resolved_in_a_context()
        {
            var         objectForScope1 = new TheClass();
            var         objectForScope2 = new TheClass();
            var         scope1 = new AmbientContext();
            var         scope2 = new AmbientContext();
            IDisposable scope1Request, scope2Request;

            Resolver.AddDependency <IContextStore, AmbientContextStore>();

            using (new ContextScope(scope1))
            {
                Resolver.CreateRequestScope();
                Resolver.AddDependencyInstance <TheClass>(objectForScope1, DependencyLifetime.PerRequest);
            }

            using (new ContextScope(scope2))
            {
                Resolver.CreateRequestScope();
                Resolver.AddDependencyInstance <TheClass>(objectForScope2, DependencyLifetime.PerRequest);
            }

            using (new ContextScope(scope1))
            {
                Resolver.ResolveAll <TheClass>()
                .ShouldBe(new[] { objectForScope1 });
            }
        }
        protected void setup()
        {
            Host = new InMemoryHost(startup: new StartupProperties
            {
                OpenRasta =
                {
                    Errors                           =
                    {
                        HandleAllExceptions          = false,
                        HandleCatastrophicExceptions = false
                    }
                }
            });

            Pipeline = null;
            _actions = new Dictionary <Type, Func <ICommunicationContext, Task <PipelineContinuation> > >();
            var manager = Host.HostManager;

            Resolver.AddDependencyInstance(typeof(IErrorCollector), Errors = new TestErrorCollector());
            Resolver.AddDependency <IPathManager, PathManager>();

            _ambientContext = new ContextScope(new AmbientContext());
            _requestScope   = Resolver.CreateRequestScope();
            manager.SetupCommunicationContext(Context = new WriteTrackingResponseCommunicationContext(InnerContext = new InMemoryCommunicationContext()));
        }
Beispiel #4
0
        public void instance_registered_as_per_request_are_cleared_when_context_store_is_terminating()
        {
            GivenInMemoryStore();
            var firstInstance = new TheClass();

            using (Resolver.CreateRequestScope())
            {
                Resolver.AddDependencyInstance <TheClass>(firstInstance, DependencyLifetime.PerRequest);

                Resolver.Resolve <TheClass>().ShouldBeSameAs(firstInstance);
            }
            Executing(() => Resolver.Resolve <TheClass>()).ShouldThrow <DependencyResolutionException>();
        }
Beispiel #5
0
        async Task HandleHostIncompingRequestReceivedAsync(IncomingRequestEventArgs e)
        {
            using (DependencyManager.ScopedResolver(Resolver))
            {
                var context = new WriteTrackingResponseCommunicationContext(e.Context);
                context.PipelineData[Keys.Request.ResolverRequestScope] = Resolver.CreateRequestScope();

                // register the required dependency in the web context
                SetupCommunicationContext(context);

                await _pipeline.RunAsync(context);
            }
        }
Beispiel #6
0
        protected override void SetUp()
        {
            base.SetUp();
            Host     = new InMemoryHost();
            Pipeline = null;
            _actions = new Dictionary <Type, Func <ICommunicationContext, Task <PipelineContinuation> > >();
            var manager = Host.HostManager;

            Resolver.AddDependencyInstance(typeof(IErrorCollector), Errors = new TestErrorCollector());
            Resolver.AddDependency <IPathManager, PathManager>();
            _requestScope = Resolver.CreateRequestScope();
            manager.SetupCommunicationContext(Context = new InMemoryCommunicationContext());
            DependencyManager.SetResolver(Resolver);
        }
Beispiel #7
0
        protected virtual void HandleHostIncomingRequestReceived(object sender, IncomingRequestEventArgs e)
        {
            Log.WriteDebug("Incoming host request for " + e.Context.Request.Uri);
            var task = CallWithDependencyResolver(async() =>
            {
                e.Context.PipelineData[Keys.Request.ResolverRequestScope] = Resolver.CreateRequestScope();

                // register the required dependency in the web context
                var context = e.Context;
                SetupCommunicationContext(context);

                await _pipeline.RunAsync(context);
            });

            e.Context.PipelineData[Keys.Request.PipelineTask] = e.RunTask = task;
        }
Beispiel #8
0
        public void registering_two_instances_for_the_same_type_resolves_at_least_one_entry()
        {
            GivenInMemoryStore();
            var firstInstance  = new TheClass();
            var secondInstance = new TheClass();

            using (Resolver.CreateRequestScope())
            {
                Resolver.AddDependencyInstance <TheClass>(firstInstance, DependencyLifetime.PerRequest);
                Resolver.AddDependencyInstance <TheClass>(secondInstance, DependencyLifetime.PerRequest);

                var result = Resolver.ResolveAll <TheClass>();

                (result.Contains(firstInstance) || result.Contains(secondInstance)).ShouldBeTrue();
            }
        }
Beispiel #9
0
        public void resolve_succeeds()
        {
            Resolver.AddDependency <IContextStore, AmbientContextStore>();

            Resolver.AddDependency <Contributor>(DependencyLifetime.Singleton);
            Resolver.AddDependency <ErrorCollector>(DependencyLifetime.Transient);

            var contributor = Resolver.Resolve <Contributor>();

            using (new ContextScope(new AmbientContext()))
                using (Resolver.CreateRequestScope())
                {
                    Resolver.AddDependencyInstance(new Request(), DependencyLifetime.PerRequest);
                    var result = contributor.Factory();
                    result.ShouldHaveSingleItem();
                }
        }
Beispiel #10
0
        public void a_type_registered_as_transient_gets_an_instance_stored_in_context_injected()
        {
            Resolver.AddDependency <IContextStore, AmbientContextStore>();
            var objectForScope = new TheClass();
            var scope          = new AmbientContext();

            Resolver.AddDependency <TheDependentClass>(DependencyLifetime.Transient);

            using (new ContextScope(scope))
                using (Resolver.CreateRequestScope())

                {
                    Resolver.AddDependencyInstance(typeof(TheClass), objectForScope, DependencyLifetime.PerRequest);

                    var dependentClass = Resolver.Resolve <TheDependentClass>();
                    dependentClass.ShouldNotBeNull();
                    dependentClass.Dependent.ShouldBeSameAs(objectForScope);
                }
        }
Beispiel #11
0
        a_type_registered_as_transient_gets_an_instance_which_is_created_with_another_instance_and_is_registered_as_perwebrequest()
        {
            Resolver.AddDependency <IContextStore, AmbientContextStore>();

            Resolver.AddDependency <TheDependentClassThatNeedsYou>(DependencyLifetime.Transient);

            var contextStore = new AmbientContext();

            using (new ContextScope(contextStore))
                using (Resolver.CreateRequestScope())

                {
                    var objectForScope = new TheClassThatNeedsYou(new NeedYou());

                    Resolver.AddDependencyInstance(typeof(TheClassThatNeedsYou), objectForScope, DependencyLifetime.PerRequest);

                    var dependentClass = Resolver.Resolve <TheDependentClassThatNeedsYou>();
                    dependentClass.ShouldNotBeNull();
                }
        }
Beispiel #12
0
        public void per_request_creates_new_instance_in_between_requests()
        {
            InMemoryStore = new InMemoryContextStore();


            Resolver.AddDependencyInstance <IContextStore>(InMemoryStore);

            Resolver.AddDependency <IUnknown, JohnDoe>(DependencyLifetime.PerRequest);

            IUnknown firstInstance;
            IUnknown secondInstance;

            using (Resolver.CreateRequestScope())
                firstInstance = Resolver.Resolve <IUnknown>();
            InMemoryStore.Clear();

            using (Resolver.CreateRequestScope())
                secondInstance = Resolver.Resolve <IUnknown>();

            firstInstance.ShouldNotBeSameAs(secondInstance);
        }
Beispiel #13
0
        public void a_dependency_registered_in_one_context_is_not_registered_in_another()
        {
            var objectForScope1 = new TheClass();

            var scope1 = new AmbientContext();
            var scope2 = new AmbientContext();

            Resolver.AddDependency <IContextStore, AmbientContextStore>();

            using (new ContextScope(scope1))
                using (Resolver.CreateRequestScope())
                {
                    Resolver.AddDependencyInstance <TheClass>(objectForScope1, DependencyLifetime.PerRequest);
                }

            using (new ContextScope(scope2))
                using (Resolver.CreateRequestScope())
                {
                    Resolver.HasDependency(typeof(TheClass)).ShouldBeFalse();

                    Executing(() => Resolver.Resolve <TheClass>()).ShouldThrow <DependencyResolutionException>();
                }
        }