public class M1:IM{} public class M2:IM{} public class M3:IM{} public class A: IA{ public A(IM m){} } public class B{ public B(IA a){} }
B需要注入IA, 容器中加入A与IA的解析, M1、M2、M3是IM接口的三个实现, 分别注入到IM中。
现在需要从容器中获取B, 而且区别不同M。
var builder = new ContainerBuilder(); builder.RegisterType<M1>().As<IM>().Named<IM>("M1").SingleInstance(); builder.RegisterType<M2>().As<IM>().Named<IM>("M2").SingleInstance(); builder.RegisterType<M3>().As<IM>().Named<IM>("M3").SingleInstance(); builder.RegisterType<A>().As<IA>() .Named<IA>("A-M1") .WithParameter(ResolvedParameter.ForNamed<IM>("M1")) .SingleInstance(); builder.RegisterType<A>().As<IA>() .Named<IA>("A-M2") .WithParameter(ResolvedParameter.ForNamed<IM>("M2")) .SingleInstance(); builder.RegisterType<A>().As<IA>() .Named<IA>("A-M3") .WithParameter(ResolvedParameter.ForNamed<IM>("M3")) .SingleInstance(); builder.RegisterType<B>().As<IB>() .WithParameter(ResolvedParameter.ForNamed<IA>("A-M1")) .SingleInstance();
总觉得哪里不对,这样分化下去,注册的数量会非常巨大。能不能直接注册B,让它注入不同的IM?
一次性注入