130 lines
3.1 KiB
C#
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");
|
|
|
|
}
|
|
}
|
|
}
|