Files
AutoFacSamples/AutoFacSamles/Program.cs

130 lines
3.1 KiB
C#

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<SMSLog>()
// .As<ILog>()
// .WithParameter("phoneNumber", "+173874872643");
// Typed parameter
//builder.RegisterType<SMSLog>()
// .As<ILog>()
// .WithParameter(new TypedParameter(typeof(string), "+173874872643"));
// resolved parameter
//builder.RegisterType<SMSLog>()
// .As<ILog>()
// .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<string>("phoneNumber")))
.As<ILog>();
Console.WriteLine("About to build container ...");
var container = builder.Build();
var log = container.Resolve<ILog>(new NamedParameter("phoneNumber", random.Next().ToString()));
log.Write("Testing");
}
}
}