static void Main(string[] args) { // REGISTRATION var container = new Container(); // Register MasterCard conrete type to ICreditCard container.Configure(x => x.For <ICreditCard>().Use <MasterCard>()); // Shopper class has ICreditCard in it's constructor // IoC will automatically get concrete type to MasterCard var shopper = container.GetInstance <Shopper>(); shopper.Charge(); // LIFECYCLE // Default lifecycle is "PerRequest" // Specify your own this way container.Configure(x => x.For <ICreditCard>().LifecycleIs(new SingletonLifecycle())); // FEATURES // TryGet => see if available => returns null if ICreditCard is NOT registered container.TryGetInstance <ICreditCard>(); // Debugging => will show you what you have in container Console.WriteLine(container.WhatDoIHave()); sContainer = new Container(); sContainer.Configure(x => x.For <ICreditCard>().Use <MasterCard>()); // Put registration into one registry class container = new Container(new MyRegistry()); // Testing named instance var classA = container.GetInstance <ClassA>(); var classB = container.GetInstance <ClassB>(); //var c = new StructureMap.Container(ce => //{ // ce.ForRequestedType<ICreditCard>().TheDefaultIsConcreteType<VisaCard>(); //}); //var test = c.GetInstance<ICreditCard>(); //var mock = new Mock<Container>(); //var t1 = mock.Setup(x => x.GetInstance<ICreditCard>()).Returns(new VisaCard()); //IoC.Initialize(); //var ccc = IoC.container.GetInstance<ICreditCard>(); var mock = new Mock <IContainer>(); var tt = mock.Object; mock.Setup(x => x.GetInstance <ICreditCard>()).Returns(new MasterCard()); //var tt2 = mock.Object.GetInstance<ICreditCard>(); var worker = new Worker(); worker.Work(mock.Object); var m = new Mock <HttpContextBase>(); //var t2 = m.Setup(x => x.Request).Returns(); }