public void Configure(Type component, DependencyLifecycle dependencyLifecycle)
        {
            this.ThrowIfDisposed();
            lock (this.configuredInstances)
            {
                if (this.configuredInstances.ContainsKey(component))
                {
                    return;
                }
            }
            ILifecycle         lifecycle          = NServiceBusStructureMapObjectBuilder.GetLifecycleFrom(dependencyLifecycle);
            ConfiguredInstance configuredInstance = null;

            this.container.Configure(delegate(ConfigurationExpression x)
            {
                configuredInstance = x.For(component, null).LifecycleIs(lifecycle).Use(component);
                x.EnableSetterInjectionFor(component);
                List <Type> list = NServiceBusStructureMapObjectBuilder.GetAllInterfacesImplementedBy(component).ToList <Type>();
                foreach (Type current in list)
                {
                    x.For(current, null).LifecycleIs(lifecycle).Use((IContext c) => c.GetInstance(component));
                    x.EnableSetterInjectionFor(current);
                }
            });
            lock (this.configuredInstances)
            {
                this.configuredInstances.Add(component, configuredInstance);
            }
        }
        public void Configure <T>(Func <T> componentFactory, DependencyLifecycle dependencyLifecycle)
        {
            this.ThrowIfDisposed();
            Type pluginType = typeof(T);

            lock (this.configuredInstances)
            {
                if (this.configuredInstances.ContainsKey(pluginType))
                {
                    return;
                }
            }
            ILifecycle            lifecycle      = NServiceBusStructureMapObjectBuilder.GetLifecycleFrom(dependencyLifecycle);
            LambdaInstance <T, T> lambdaInstance = null;

            this.container.Configure(delegate(ConfigurationExpression x)
            {
                lambdaInstance = x.For <T>(null).LifecycleIs(lifecycle).Use <T>("Custom constructor func", componentFactory);
                x.EnableSetterInjectionFor(pluginType);
                foreach (Type current in NServiceBusStructureMapObjectBuilder.GetAllInterfacesImplementedBy(pluginType))
                {
                    x.For(current, null).Use((IContext c) => (object)c.GetInstance <T>());
                    x.EnableSetterInjectionFor(current);
                }
            });
            lock (this.configuredInstances)
            {
                this.configuredInstances.Add(pluginType, lambdaInstance);
            }
        }