Parameters at registration time

This commit is contained in:
2020-11-29 17:35:25 +01:00
parent e10dcfa377
commit 666e719f5d

View File

@ -1,4 +1,5 @@
using Autofac; using Autofac;
using Autofac.Core;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -49,6 +50,20 @@ namespace AutoFacSamles
} }
} }
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 public class Car
{ {
private Engine engine; private Engine engine;
@ -79,14 +94,34 @@ namespace AutoFacSamles
{ {
var builder = new ContainerBuilder(); var builder = new ContainerBuilder();
// IList<T> --> List<T> // Named parameter
// IList<int> --> List<int> //builder.RegisterType<SMSLog>()
builder.RegisterGeneric(typeof(List<>)).As(typeof(IList<>)); // .As<ILog>()
// .WithParameter("phoneNumber", "+173874872643");
IContainer container = builder.Build(); // 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")));
var container = builder.Build();
var log = container.Resolve<ILog>();
log.Write("test message");
var myList = container.Resolve<IList<int>>();
Console.WriteLine(myList.GetType());
} }
} }
} }