コード例 #1
0
        internal Container(IPipelineGraph pipelineGraph)
        {
            Name = Guid.NewGuid().ToString();

            _pipelineGraph = pipelineGraph;
            _pipelineGraph.RegisterContainer(this);
        }
コード例 #2
0
        public BuildPlanVisualizer(IPipelineGraph pipeline, bool deep = false, int levels = 0)
        {
            _pipeline = pipeline;
            _writer   = new TreeWriter();

            _maxLevels = deep ? int.MaxValue : levels;
        }
コード例 #3
0
ファイル: Container.cs プロジェクト: sami1971/structuremap
        internal Container(IPipelineGraph pipelineGraph)
        {
            Name = Guid.NewGuid().ToString();

            _pipelineGraph = pipelineGraph;
            _pipelineGraph.Outer.Families[typeof(IContainer)].SetDefault(new ObjectInstance(this));
        }
コード例 #4
0
        public void SetUp()
        {
            theResolver = MockRepository.GenerateMock <IBuildSession>();
            theCache    = new SessionCache(theResolver);

            thePipeline = MockRepository.GenerateMock <IPipelineGraph>();
        }
コード例 #5
0
        public BuildPlanVisualizer(IPipelineGraph pipeline, bool deep = false, int levels = 0)
        {
            _pipeline = pipeline;
            _writer = new TreeWriter();

            _maxLevels = deep ? int.MaxValue : levels;
        }
コード例 #6
0
        public static void AssertNoErrors(IPipelineGraph graph)
        {
            var validator = new PipelineGraphValidator();
            findPipelines(graph).Each(x => validator.Validate(graph, graph.Policies));

            validator.AssertIsValid();
        }
コード例 #7
0
        public static void AssertNoErrors(IPipelineGraph graph)
        {
            var validator = new PipelineGraphValidator();

            findPipelines(graph).Each(x => validator.Validate(graph, graph.Policies));

            validator.AssertIsValid();
        }
コード例 #8
0
        private IContainer GetNestedContainer(IPipelineGraph pipeline)
        {
            var container = new Container(pipeline)
            {
                Name = "Nested-" + Name
            };

            return(container);
        }
コード例 #9
0
        public Profiles(PluginGraph pluginGraph, IPipelineGraph root)
        {
            _profiles = new Cache <string, IPipelineGraph>(name => {
                var profileGraph = pluginGraph.Profile(name);

                var instances = new ComplexInstanceGraph(root, profileGraph, ContainerRole.ProfileOrChild);
                return(new PipelineGraph(profileGraph, instances, root, root.Singletons, root.Transients));
            });
        }
コード例 #10
0
ファイル: Profiles.cs プロジェクト: flq/structuremap
        public Profiles(PluginGraph pluginGraph, IPipelineGraph root)
        {
            _profiles = new Cache<string, IPipelineGraph>(name => {
                var profileGraph = pluginGraph.Profile(name);

                var instances = new ComplexInstanceGraph(root, profileGraph, ContainerRole.ProfileOrChild);
                return new PipelineGraph(profileGraph, instances, root, root.Singletons, root.Transients);
            });
        }
コード例 #11
0
        public BuildSession(IPipelineGraph pipelineGraph, string requestedName = null, ExplicitArguments args = null)
        {
            _pipelineGraph = pipelineGraph;

            _sessionCache = new SessionCache(this, args);


            RequestedName = requestedName ?? DEFAULT;
        }
コード例 #12
0
        public void Dispose()
        {
            if (_disposedLatch)
            {
                return;
            }
            _disposedLatch = true;

            _pipelineGraph.SafeDispose();
            _pipelineGraph = null;
        }
コード例 #13
0
        private BuildSession(IPipelineGraph pipelineGraph, string requestedName, ExplicitArguments args,
                             Stack <Instance> buildStack)
        {
            this.pipelineGraph = pipelineGraph;

            _sessionCache = new SessionCache(this, args);

            RequestedName = requestedName ?? DEFAULT;

            _instances = buildStack ?? new Stack <Instance>();
        }
コード例 #14
0
        public SessionCacheTester()
        {
            theResolverMock = Substitute.For <IBuildSession>();

            theCache = new SessionCache(theResolverMock);

            thePipeline = Substitute.For <IPipelineGraph>();
            thePipeline.ToModel().Returns(new Container().Model);

            instanceGraphMock = Substitute.For <IInstanceGraph>();
            thePipeline.Instances.Returns(instanceGraphMock);
        }
コード例 #15
0
        private static IEnumerable <IPipelineGraph> findPipelines(IPipelineGraph graph)
        {
            yield return(graph);

            if (graph.Role == ContainerRole.Root)
            {
                foreach (var profile in graph.Profiles.AllProfiles())
                {
                    yield return(profile);
                }
            }
        }
コード例 #16
0
        public void SetUp()
        {
            theResolver = MockRepository.GenerateMock<IBuildSession>();

            theCache = new SessionCache(theResolver);

            thePipeline = MockRepository.GenerateMock<IPipelineGraph>();
            thePipeline.Stub(x => x.ToModel()).Return(new Container().Model);

            theInstances = MockRepository.GenerateMock<IInstanceGraph>();
            thePipeline.Stub(x => x.Instances).Return(theInstances);
        }
コード例 #17
0
        private static IEnumerable<IPipelineGraph> findPipelines(IPipelineGraph graph)
        {
            yield return graph;

            if (graph.Role == ContainerRole.Root)
            {
                foreach (var profile in graph.Profiles.AllProfiles())
                {
                    yield return profile;
                }
            }
        }
コード例 #18
0
        public SessionCacheTester()
        {
            theResolverMock = Substitute.For<IBuildSession>();

            theCache = new SessionCache(theResolverMock);

            thePipeline = Substitute.For<IPipelineGraph>();
            thePipeline.ToModel().Returns(new Container().Model);

            instanceGraphMock = Substitute.For<IInstanceGraph>();
            thePipeline.Instances.Returns(instanceGraphMock);
        }
コード例 #19
0
        public void SetUp()
        {
            theResolver = MockRepository.GenerateMock <IBuildSession>();

            theCache = new SessionCache(theResolver);

            thePipeline = MockRepository.GenerateMock <IPipelineGraph>();
            thePipeline.Stub(x => x.ToModel()).Return(new Container().Model);

            theInstances = MockRepository.GenerateMock <IInstanceGraph>();
            thePipeline.Stub(x => x.Instances).Return(theInstances);
        }
コード例 #20
0
        public SessionCacheTester()
        {
            theResolverMock = new Mock<IBuildSession>();

            theCache = new SessionCache(theResolverMock.Object);

            var thePipelineMock = new Mock<IPipelineGraph>();
            thePipelineMock.Setup(x => x.ToModel()).Returns(new Container().Model);
            thePipeline = thePipelineMock.Object;

            instanceGraphMock = new Mock<IInstanceGraph>();
            thePipelineMock.Setup(x => x.Instances).Returns(instanceGraphMock.Object);
        }
コード例 #21
0
        public SessionCacheTester()
        {
            theResolverMock = new Mock <IBuildSession>();

            theCache = new SessionCache(theResolverMock.Object);

            var thePipelineMock = new Mock <IPipelineGraph>();

            thePipelineMock.Setup(x => x.ToModel()).Returns(new Container().Model);
            thePipeline = thePipelineMock.Object;

            instanceGraphMock = new Mock <IInstanceGraph>();
            thePipelineMock.Setup(x => x.Instances).Returns(instanceGraphMock.Object);
        }
コード例 #22
0
        private void tryBuildInstance(Type pluginType, Instance instance, IPipelineGraph pipeline, ProfileReport report)
        {
            var session = new BuildSession(pipeline, instance.Name);

            try
            {
                var @object = session.FindObject(pluginType, instance);
                validate(pluginType, instance, @object, report);
            }
            catch (StructureMapException ex)
            {
                ex.Instances.Each(x => _buildPlanFailureIds.Fill(x));

                report.AddError(pluginType, instance, ex);
            }
        }
コード例 #23
0
        private void tryBuildInstance(Type pluginType, Instance instance, IPipelineGraph pipeline, ProfileReport report)
        {
            var session = new BuildSession(pipeline, instance.Name);

            try
            {
                var @object = session.FindObject(pluginType, instance);
                validate(pluginType, instance, @object, report);
            }
            catch (StructureMapException ex)
            {
                ex.Instances.Each(x => _buildPlanFailureIds.Fill(x));

                report.AddError(pluginType, instance, ex);
            }
        }
コード例 #24
0
        public void Validate(IPipelineGraph pipeline, Policies policies)
        {
            var report = new ProfileReport(pipeline);
            _reports.Add(report);

            var closedTypes = pipeline.ToModel().PluginTypes.Where(x => !x.PluginType.IsOpenGeneric()).ToArray();

            closedTypes.Each(
                family => {
                    family.Instances.Each(i => { tryCreateBuildPlan(family.PluginType, i, policies, report); });
                });

            closedTypes.Each(
                family => {
                    family.Instances.Where(x => !_buildPlanFailureIds.Contains(x.Instance.Id))
                        .Each(i => { tryBuildInstance(family.PluginType, i.Instance, pipeline, report); });
                });
        }
コード例 #25
0
        public object GetDefault(Type pluginType, IPipelineGraph pipelineGraph)
        {
            if (_defaults.ContainsKey(pluginType))
            {
                return(_defaults[pluginType]);
            }

            var instance = pipelineGraph.Instances.GetDefault(pluginType);

            if (instance == null)
            {
                var ex =
                    new StructureMapConfigurationException(
                        "No default Instance is registered and cannot be automatically determined for type '{0}'",
                        pluginType.GetFullName());

                if (pipelineGraph.ToModel().HasImplementationsFor(pluginType))
                {
                    ex.Context = new WhatDoIHaveWriter(pipelineGraph).GetText(new ModelQuery {
                        PluginType = pluginType
                    },
                                                                              "No default instance is specified.  The current configuration for type {0} is:".ToFormat(
                                                                                  pluginType.GetFullName()));
                }
                else
                {
                    ex.Context = "There is no configuration specified for " + pluginType.GetFullName();
                }


                throw ex;
            }

            var lifecycle = pipelineGraph.DetermineLifecycle(pluginType, instance);

            var o = GetObject(pluginType, instance, lifecycle);

            if (!(lifecycle is UniquePerRequestLifecycle) && pluginType != typeof(IContainer))
            {
                _defaults.Add(pluginType, o);
            }

            return(o);
        }
コード例 #26
0
        public void Validate(IPipelineGraph pipeline, Policies policies)
        {
            var report = new ProfileReport(pipeline);

            _reports.Add(report);

            var closedTypes = pipeline.ToModel().PluginTypes.Where(x => !x.PluginType.IsOpenGeneric()).ToArray();

            closedTypes.Each(
                family => {
                family.Instances.Each(i => { tryCreateBuildPlan(family.PluginType, i, policies, report); });
            });

            closedTypes.Each(
                family => {
                family.Instances.Where(x => !_buildPlanFailureIds.Contains(x.Instance.Id))
                .Each(i => { tryBuildInstance(family.PluginType, i.Instance, pipeline, report); });
            });
        }
コード例 #27
0
ファイル: SessionCache.cs プロジェクト: sami1971/structuremap
        public object TryGetDefault(Type pluginType, IPipelineGraph pipelineGraph)
        {
            if (_defaults.ContainsKey(pluginType))
            {
                return(_defaults[pluginType]);
            }

            var instance = pipelineGraph.GetDefault(pluginType);

            if (instance == null)
            {
                return(null);
            }

            var o = GetObject(pluginType, instance);

            _defaults.Add(pluginType, o);

            return(o);
        }
コード例 #28
0
ファイル: PipelineGraph.cs プロジェクト: valmont/structuremap
        public PipelineGraph(PluginGraph pluginGraph, IInstanceGraph instances, IPipelineGraph root,
                             IObjectCache singletons, IObjectCache transients)
        {
            _pluginGraph = pluginGraph;
            _instances   = instances;

            if (root == null)
            {
                _root     = this;
                _profiles = new Profiles(_pluginGraph, this);
            }
            else
            {
                _root     = root.Root();
                _profiles = root.Profiles;
            }

            _singletons = singletons;
            _transients = transients;
        }
コード例 #29
0
ファイル: PipelineGraph.cs プロジェクト: KevM/structuremap
        public PipelineGraph(PluginGraph pluginGraph, IInstanceGraph instances, IPipelineGraph root,
            IObjectCache singletons, IObjectCache transients)
        {
            _pluginGraph = pluginGraph;
            _instances = instances;

            if (root == null)
            {
                _root = this;
                _profiles = new Profiles(_pluginGraph, this);
            }
            else
            {
                _root = root.Root();
                _profiles = root.Profiles;
            }

            _singletons = singletons;
            _transients = transients;
        }
コード例 #30
0
ファイル: SessionCache.cs プロジェクト: sami1971/structuremap
        public object GetDefault(Type pluginType, IPipelineGraph pipelineGraph)
        {
            if (_defaults.ContainsKey(pluginType))
            {
                return(_defaults[pluginType]);
            }

            var instance = pipelineGraph.GetDefault(pluginType);

            if (instance == null)
            {
                throw new StructureMapException(202, pluginType);
            }


            var o = GetObject(pluginType, instance);

            if (!instance.IsUnique())
            {
                _defaults.Add(pluginType, o);
            }

            return(o);
        }
コード例 #31
0
 public WhatDoIHaveWriter(IPipelineGraph graph)
 {
     _graph = graph;
 }
コード例 #32
0
 public ValidationBuildSession(IPipelineGraph pipelineGraph)
     : base(pipelineGraph)
 {
 }
コード例 #33
0
 public ComplexInstanceGraph(IPipelineGraph parent, PluginGraph pluginGraph, ContainerRole role)
 {
     _parent      = parent;
     _pluginGraph = pluginGraph;
     Role         = role;
 }
コード例 #34
0
 public BuildSession(IPipelineGraph pipelineGraph, string requestedName = null, ExplicitArguments args = null)
     : this(pipelineGraph, requestedName, args, null)
 {
 }
コード例 #35
0
 public ComplexPipelineGraph(IPipelineGraph parent, PluginGraph outer, IObjectCache transientCache)
 {
     _parent = parent;
     _outer = outer;
     _transientCache = transientCache;
 }
コード例 #36
0
ファイル: Profiles.cs プロジェクト: stantoxt/structuremap
 public Profiles(PluginGraph pluginGraph, IPipelineGraph root)
 {
     _pluginGraph = pluginGraph;
     _root        = root;
 }
コード例 #37
0
        public when_the_singleton_Lifecycle_ejects_all()
        {
            lifecycle = new SingletonLifecycle();

            disposable1 = new StubDisposable();
            disposable2 = new StubDisposable();

            pipeline = PipelineGraph.BuildRoot(PluginGraph.CreateRoot());

            lifecycle.FindCache(pipeline)
                .As<LifecycleObjectCache>()
                .Set(typeof(IGateway), new StubInstance("a"), disposable1);
            lifecycle.FindCache(pipeline)
                .As<LifecycleObjectCache>()
                .Set(typeof(IGateway), new StubInstance("b"), disposable2);
            lifecycle.FindCache(pipeline)
                .As<LifecycleObjectCache>()
                .Set(typeof(IGateway), new StubInstance("c"), new object());

            lifecycle.EjectAll(pipeline);
        }
コード例 #38
0
 static StubBuildSession()
 {
     _pipeline = PipelineGraph.BuildRoot(_pluginGraph);
 }
コード例 #39
0
 internal Model(IPipelineGraph graph, PluginGraph pluginGraph)
 {
     _graph      = graph;
     PluginGraph = pluginGraph;
 }
コード例 #40
0
 public ComplexInstanceGraph(IPipelineGraph parent, PluginGraph pluginGraph, ContainerRole role)
 {
     _parent = parent;
     _pluginGraph = pluginGraph;
     Role = role;
 }
コード例 #41
0
 public ValidationBuildSession(IPipelineGraph pipelineGraph)
     : base(pipelineGraph)
 {
 }
コード例 #42
0
        public void SetUp()
        {
            lifecycle = new SingletonLifecycle();

            disposable1 = new StubDisposable();
            disposable2 = new StubDisposable();

            pipeline = PipelineGraph.BuildRoot(new PluginGraph());

            lifecycle.FindCache(pipeline)
                .As<LifecycleObjectCache>()
                .Set(typeof (IGateway), new StubInstance("a"), disposable1);
            lifecycle.FindCache(pipeline)
                .As<LifecycleObjectCache>()
                .Set(typeof (IGateway), new StubInstance("b"), disposable2);
            lifecycle.FindCache(pipeline)
                .As<LifecycleObjectCache>()
                .Set(typeof (IGateway), new StubInstance("c"), new object());

            lifecycle.EjectAll(pipeline);
        }
コード例 #43
0
 public GenericFamilyConfiguration(PluginFamily family, IPipelineGraph pipeline)
 {
     _family = family;
     _pipeline = pipeline;
     _graph = family.Owner;
 }
コード例 #44
0
        public void SetUp()
        {
            theResolver = MockRepository.GenerateMock<IBuildSession>();
            theCache = new SessionCache(theResolver);

            thePipeline = MockRepository.GenerateMock<IPipelineGraph>();
        }
コード例 #45
0
ファイル: ProfileReport.cs プロジェクト: slahn/structuremap
 public ProfileReport(IPipelineGraph pipelineGraph)
 {
     _role = pipelineGraph.Role;
     _profile = pipelineGraph.Profile;
 }
コード例 #46
0
 public ClosedPluginTypeConfiguration(PluginFamily family, IPipelineGraph pipelineGraph)
 {
     _family = family;
     _pipelineGraph = pipelineGraph;
 }
コード例 #47
0
ファイル: StubBuildSession.cs プロジェクト: yuzd/lamar
 static StubBuildSession()
 {
     _pipeline = PipelineGraph.BuildRoot(_pluginGraph);
 }
コード例 #48
0
 public ClosedPluginTypeConfiguration(PluginFamily family, IPipelineGraph pipelineGraph)
 {
     _family        = family;
     _pipelineGraph = pipelineGraph;
 }
コード例 #49
0
 public WhatDoIHaveWriter(IPipelineGraph graph)
 {
     _graph = graph;
 }
コード例 #50
0
ファイル: Profiles.cs プロジェクト: slahn/structuremap
 public Profiles(PluginGraph pluginGraph, IPipelineGraph root)
 {
     _pluginGraph = pluginGraph;
     _root = root;
 }
コード例 #51
0
 public GenericFamilyConfiguration(PluginFamily family, IPipelineGraph pipeline)
 {
     _family   = family;
     _pipeline = pipeline;
     _graph    = family.Owner;
 }
コード例 #52
0
 static StubBuildSession()
 {
     _pipeline = new RootPipelineGraph(_pluginGraph);
 }
コード例 #53
0
ファイル: Model.cs プロジェクト: sami1971/structuremap
 internal Model(IPipelineGraph graph)
 {
     _graph      = graph;
     PluginGraph = _graph.Outer;
 }