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无关
    { }
}

 

posted @ 2021-03-26 17:19  心平气又和  阅读(195)  评论(0编辑  收藏  举报