首页 新闻 赞助 找找看

Autofac IOC 同一接口注入不同实例的问题

0
悬赏园豆:20 [待解决问题]
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?

Zigzag的主页 Zigzag | 初学一级 | 园豆:70
提问于:2016-05-20 11:01
< >
分享
所有回答(1)
0

一次性注入

Curry.Zhang | 园豆:204 (菜鸟二级) | 2019-06-20 10:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册