在使用Autofac时,为了实例化不同的类型,可以使用Keyed Instance。有时我们需要在运行时提供参数,以便动态地实例化这些类型。
下面是一个示例代码:
首先,定义接口和实现类:
public interface IMyService
{
void DoSomething(string name);
}
public class MyService : IMyService
{
public void DoSomething(string name)
{
Console.WriteLine("Hello, " + name + "!");
}
}
然后定义一个枚举类型,用于指定不同的实现:
public enum ServiceType
{
Type1,
Type2
}
最后,使用Autofac,根据枚举值动态创建实例:
var builder = new ContainerBuilder();
builder.RegisterType().Keyed(ServiceType.Type1);
builder.RegisterType().Keyed(ServiceType.Type2);
var container = builder.Build();
// 此处假设Type2需要额外的参数
var type = ServiceType.Type2;
var name = "World";
var service = container.ResolveKeyed(type, new TypedParameter(typeof(string), name));
service.DoSomething(name);
在上面的示例中,使用Keyed方法注册实现类,并且可以使用ResolveKeyed方法动态创建实例,根据不同的枚举值和参数来选择不同的实现。