Beispiel #1
0
        public void Instance(Type pluginType, Instance instance)
        {
            if (_instanceStack.Any() && Equals(_instanceStack.Peek(), instance))
            {
                return;
            }

            if (_instanceStack.Contains(instance))
            {
                _writer.Line("Bi-Directional Relationship Detected w/ Instance {0}, PluginType {1}", instance.Description, pluginType.GetTypeName());
            }

            _instanceStack.Push(instance);


            if (pluginType != null)
            {
                _writer.Line("PluginType: " + pluginType.GetFullName());
            }

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

            _writer.Line("Lifecycle: " + lifecycle.Description);

            var plan = instance.ResolveBuildPlan(pluginType ?? instance.ReturnedType, _pipeline.Policies);

            plan.AcceptVisitor(this);
            _instanceStack.Pop();
        }
 public bool HasBeenCreated(Instance instance)
 {
     return
         (_pipelineGraph.DetermineLifecycle(_family.PluginType, instance)
          .FindCache(_pipelineGraph)
          .Has(_family.PluginType, instance));
 }
        public bool HasBeenCreated(Instance instance)
        {
            var lifecycle = _pipelineGraph.DetermineLifecycle(_family.PluginType, instance);

            // Fixes GH-363
            if (lifecycle is ObjectLifecycle)
            {
                return(true);
            }

            return
                (lifecycle
                 .FindCache(_pipelineGraph)
                 .Has(_family.PluginType, instance));
        }
        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 object TryGetDefault(Type pluginType, IPipelineGraph pipelineGraph)
        {
            if (_defaults.ContainsKey(pluginType))
            {
                return(_defaults[pluginType]);
            }

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

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

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

            _defaults.Add(pluginType, o);

            return(o);
        }
        public object ResolveFromLifecycle(Type pluginType, Instance instance)
        {
            var cache = _pipelineGraph.DetermineLifecycle(pluginType, instance).FindCache(_pipelineGraph);

            return(cache.Get(pluginType, instance, this));
        }