示例#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
        internal Container(IPipelineGraph pipelineGraph)
        {
            Name = Guid.NewGuid().ToString();

            _pipelineGraph = pipelineGraph;
            _pipelineGraph.Outer.Families[typeof(IContainer)].SetDefault(new ObjectInstance(this));
        }
        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;
        }
        public static void AssertNoErrors(IPipelineGraph graph)
        {
            var validator = new PipelineGraphValidator();
            findPipelines(graph).Each(x => validator.Validate(graph, graph.Policies));

            validator.AssertIsValid();
        }
        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
        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);
        }
        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);
        }
        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);
        }
        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);
        }
        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);
            }
        }
        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);
            }
        }
        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);
        }
        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
        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
        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
        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
        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;
 }
 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)
 {
 }
 public ComplexPipelineGraph(IPipelineGraph parent, PluginGraph outer, IObjectCache transientCache)
 {
     _parent = parent;
     _outer = outer;
     _transientCache = transientCache;
 }
示例#36
0
 public Profiles(PluginGraph pluginGraph, IPipelineGraph root)
 {
     _pluginGraph = pluginGraph;
     _root        = root;
 }
        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;
 }
 public ValidationBuildSession(IPipelineGraph pipelineGraph)
     : base(pipelineGraph)
 {
 }
        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);
        }
 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
 public ProfileReport(IPipelineGraph pipelineGraph)
 {
     _role = pipelineGraph.Role;
     _profile = pipelineGraph.Profile;
 }
 public ClosedPluginTypeConfiguration(PluginFamily family, IPipelineGraph pipelineGraph)
 {
     _family = family;
     _pipelineGraph = pipelineGraph;
 }
示例#47
0
 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
 public Profiles(PluginGraph pluginGraph, IPipelineGraph root)
 {
     _pluginGraph = pluginGraph;
     _root = root;
 }
 public GenericFamilyConfiguration(PluginFamily family, IPipelineGraph pipeline)
 {
     _family   = family;
     _pipeline = pipeline;
     _graph    = family.Owner;
 }
示例#52
0
 static StubBuildSession()
 {
     _pipeline = new RootPipelineGraph(_pluginGraph);
 }
示例#53
0
 internal Model(IPipelineGraph graph)
 {
     _graph      = graph;
     PluginGraph = _graph.Outer;
 }