class Program { static void Main(string[] args) { try { var container = new Container(new Registry()); IWidgetFactory widgetFactory = container.GetInstance<IWidgetFactory>(); var widget = widgetFactory.Create("test"); } catch (Exception exception) { Debug.WriteLine(exception); } } } public class Registry: StructureMap.Registry { public Registry() { For<IWidget>().Use<Widget>(); //.SelectConstructor(() => new Widget("_")); //.Ctor<string>("@string"); // ForConcreteType<Widget>().Configure.SelectConstructor(() =>new Widget("_")); For<IWidgetFactory>().CreateFactory(); } } public class Widget: IWidget { public Widget() => Debug.WriteLine($"Creating {nameof(Widget)}"); //[DefaultConstructor] public Widget(string @string) => Debug.WriteLine($"Creating {nameof(Widget)}: string {@string}"); public Widget(int @int) => Debug.WriteLine($"Creating {nameof(Widget)}: int {@int}"); public Widget(int @int, string @string) => Debug.WriteLine($"Creating {nameof(Widget)}: {@int} {@string}"); public Widget(string string1, string string2) => Debug.WriteLine($"Creating {nameof(Widget)}: {string1} {string2}"); } public interface IWidget {} public interface IWidgetFactory { IWidget Create(string string1); }