我一直在尝试使用 autofac 注册和注入两个相同类型的不同对象,但我无法成功注入第二个对象。注入的第二个对象总是在使用SingleInstance()时首先注册的类型 1 的同一个实例,或者在使用InstancePerLifetimeScope时是类型 1 的另一个实例。InstancePerDependency也不起作用。关于如何实现这一点的任何建议?谢谢!
发现了一个类似的未解决问题 -注入相同类型的多个实例 - Autofac
/* Register named object of type1 */
builder.RegisterType<TestClient>()
.As<TestClient>()
.UsingConstructor(typeof(Settings), typeof(SampleEnum))
.WithParameters(new[]{
new ResolvedParameter((p, c) => p.ParameterType.IsAssignableTo<Settings>(), (p, c) => c.Resolve<Settings>()),
new ResolvedParameter((p, c) => p.ParameterType == typeof(SampleEnum) && p.Name == "eventtype",(p, c) => SampleEnum.Type1),
}).Named<TestClient>(clientoftype1).InstancePerDependency();
/* Register named object of type2 */
builder.RegisterType<TestClient>()
.As<TestClient>()
.UsingConstructor(typeof(Settings), typeof(SampleEnum))
.WithParameters(new[]{
new ResolvedParameter((p, c) => p.ParameterType.IsAssignableTo<Settings>(), (p, c) => c.Resolve<Settings>()),
new ResolvedParameter((p, c) => p.ParameterType == typeof(SampleEnum) && p.Name == "eventtype",(p, c) => SampleEnum.Type2),
}).Named<TestClient>(clientoftype2)).InstancePerDependency();
/*Controller registration
public DevController(TestClient clientoftype1, TestClient clientoftype2)
{..}
*/
builder
.RegisterType<DevController>()
.As<DevController>()
.WithParameters(new []{
ResolvedParameter.ForNamed<TestClient>("clientoftype1"),
ResolvedParameter.ForNamed<TestClient>("clientoftype2"),
} ).InstancePerRequest();
/*Check registered types*/
var types = container.ComponentRegistry.Registrations
.Where(r => typeof(TestClient).IsAssignableFrom(r.Activator.LimitType))
.Select(r => r.Activator.LimitType);
var countofobjects = types.ToList();//This has 2 objects.