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)); }