UnityContainer多构造函数配置
参考
https://my.oschina.net/bery/blog/62724
UnityContainer的构造函数选择机制
当对象拥有多个构造函数时,Unity默认使用参数最多的构造函数实例化
指定UnityContainer使用的构造函数:
在该构造函数上方添加特性[InjectionConstructor],如:
public class BaseDal { IContext _context; [InjectionConstructor]//有这个特性则Unity使用它进行实例化 public BaseDal(IContext context) { _context = context; } //如果没有上方[InjectionConstructor]特性则Unity使用这个进行实例化 (它参数最多) public BaseDal(IRepositoryContext context, string param1 = "p1", param2 = "p2") { _context = context; } }
注意:该特性仅对直接mapTo这个类的实例化生效,像下面这种派生类指定基类构造函数的写法,在Resolve派生类时,使用的是派生类指定的基类构造函数
public class SubDal : BaseDal { public SubDal(IContext context)//Resolve<SubDal>时,UnityContainer的实例化仅限于这一层(取context交给下边基类函数调用) : base(context, param2: "ACTIVITYTASKID") //这里已经是普通的基类构造函数调用了,与UnityContainer无关 { } }