using System;
using StructureMap;
namespace ConsoleApplication1 {
class Program {
private static void Main(string[] args) {
ConfigureDependencies();
IAppEngine appEngine = ObjectFactory.GetInstance<IAppEngine>();
appEngine.Run();
}
private static void ConfigureDependencies() {
StructureMapConfiguration.ForRequestedType<IAppEngine>().TheDefaultIsConcreteType<AppEngine>();
StructureMapConfiguration.ForRequestedType<IGreeter>().TheDefaultIsConcreteType<EnglishGreeter>();
StructureMapConfiguration.ForRequestedType<IOutputDisplay>().TheDefaultIsConcreteType<ConsoleOutputDisplay>();
}
}
public class AppEngine : IAppEngine {
private readonly IGreeter greeter;
private readonly IOutputDisplay outputDisplay;
public AppEngine(IGreeter greeter, IOutputDisplay outputDisplay) {
this.greeter = greeter;
this.outputDisplay = outputDisplay;
}
public void Run() {
outputDisplay.Show(greeter.GetGreeting());
}
}
public interface IAppEngine {
void Run();
}
public interface IGreeter {
string GetGreeting();
}
public class EnglishGreeter : IGreeter {
public string GetGreeting() {
return "Hello";
}
}
public class FrenchGreeter : IGreeter {
public string GetGreeting() {
return "Bonjour";
}
}
public interface IOutputDisplay {
void Show(string message);
}
public class ConsoleOutputDisplay : IOutputDisplay {
public void Show(string message) {
Console.WriteLine(message);
}
}
}