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"))) .As(); Console.WriteLine("About to build container ..."); var container = builder.Build(); var log = container.Resolve(new NamedParameter("phoneNumber", random.Next().ToString())); log.Write("Testing"); } } }