using Autofac; using Autofac.Core; using System; using System.Collections.Generic; namespace AutoFacSamles { public interface ILog { void Write(string message); } public class ConsoleLog : ILog { public void Write(string message) { Console.WriteLine(message); } } public class EmailLog : ILog { private const string adminEmail = "tfoman@oeman.se"; public void Write(string message) { Console.WriteLine($"Email sent to {adminEmail} : {message}"); } } public class Engine { private ILog log; private int id; public Engine(ILog log, int id) { this.log = log; this.id = id; } public Engine(ILog log) { this.log = log; id = new Random().Next(); } public void Ahead(int power) { log.Write($"Engine [{id}] ahead {power}"); } } public class SMSLog : ILog { private readonly string phoneNumber; public SMSLog(string phoneNumber) { this.phoneNumber = phoneNumber; } public void Write(string message) { Console.WriteLine($"SMS to {phoneNumber} : {message}"); } } public class Car { private Engine engine; private ILog log; public Car(Engine engine) { this.engine = engine; this.log = new EmailLog(); } public Car(Engine engine, ILog log) { this.engine = engine; this.log = log; } public void Go() { engine.Ahead(100); log.Write("Car going forward..."); } } class Program { static void Main(string[] args) { var builder = new ContainerBuilder(); // Named parameter //builder.RegisterType() // .As() // .WithParameter("phoneNumber", "+173874872643"); // Typed parameter //builder.RegisterType() // .As() // .WithParameter(new TypedParameter(typeof(string), "+173874872643")); // resolved parameter builder.RegisterType() .As() .WithParameter( new ResolvedParameter( // predicate (pi, ctx) => pi.ParameterType == typeof(string) && pi.Name == "phoneNumber", (pi, ctx) => "+173874872643" ) ); //Random random = new Random(); //builder.Register((c, p) => new SMSLog(p.Named("phoneNumber"))); var container = builder.Build(); var log = container.Resolve(); log.Write("test message"); } } }