.where(x => !x.isinterface && x.name.contains(suffix) && !x.isgenerictype)
}
实际就是载入指定的dll(根据dll名字载入),然后过滤出非泛型且符合后缀的实现类(一般仓储,业务都有固定的后缀,可以自己定义命名规则,例如xxxreository, xxxservice等),并且找到实现类所继承的接口(根据我设想,最好是一个接口一个实现,如果遇到一个接口多个实现的地方,尽量自己手工注入,以免引起不必要的误会),进行单元测试,示例如下
[testmethod]
public void batchditestmethod()
{
var accessimpleandinterfaces= assemblyhelper.getimpleandinterfaces("djms.dataaccess","access");
foreach(var v in accessimpleandinterfaces)
{
console.writeline($"class={v.key},interface={v.value[0]},{v.value.length}");
}
console.writeline($"access接口及实现个数为:{accessimpleandinterfaces.count}");
var logicimpleandinterfaces = assemblyhelper.getimpleandinterfaces("djms.businesslogic", "logic");
foreach (var v in logicimpleandinterfaces)
{
console.writeline($"class={v.key},interface={v.value[0]},{v.value.length}");
}
console.writeline($"logic接口及实现个数为:{accessimpleandinterfaces.count}");
}
单元测试结果,发现没有问题,都可以找准
class=djms.dataaccess.repository.departmentaccess,interface=djms.dataaccess.repository.idepartmentaccess,1
class=djms.dataaccess.repository.elemetokenaccess,interface=djms.dataaccess.repository.ielemetokenaccess,1
class=djms.dataaccess.repository.menuaccess,interface=djms.dataaccess.repository.imenuaccess,1
class=djms.dataaccess.repository.newsaccess,interface=djms.dataaccess.repository.inewsaccess,1
class=djms.dataaccess.repository.newstypeaccess,interface=djms.dataaccess.repository.inewstypeaccess,1
class=djms.dataaccess.repository.roleaccess,interface=djms.dataaccess.repository.iroleaccess,1
class=djms.dataaccess.repository.rolemenuaccess,interface=djms.dataaccess.repository.irolemenuaccess,1
class=djms.dataaccess.repository.smsaccess,interface=djms.dataaccess.repository.ismsaccess,1
class=djms.dataaccess.repository.useraccess,interface=djms.dataaccess.repository.iuseraccess,1
class=djms.dataaccess.repository.userroleaccess,interface=djms.dataaccess.repository.iuserroleaccess,1
access接口及实现个数为:10
class=djms.businesslogic.user.userlogic,interface=djms.businesslogic.user.iuserlogic,1
class=djms.businesslogic.userrole.userrolelogic,interface=djms.businesslogic.userrole.iuserrolelogic,1
class=djms.businesslogic.sms.smslogic,interface=djms.businesslogic.sms.ismslogic,1
class=djms.businesslogic.role.rolelogic,interface=djms.businesslogic.role.irolelogic,1
class=djms.businesslogic.photo.photologic,interface=djms.businesslogic.photo.iphotologic,1
class=djms.businesslogic.news.newslogic,interface=djms.businesslogic.news.inewslogic,1
class=djms.businesslogic.newstype.newstypelogic,interface=djms.businesslogic.newstype.inewstypelogic,1
class=djms.businesslogic.menu.menulogic,interface=djms.businesslogic.menu.imenulogic,1
class=djms.businesslogic.eleme.elemelogic,interface=djms.businesslogic.eleme.ielemelogic,1
class=djms.businesslogic.department.departmentlogic,interface=djms.businesslogic.department.idepartmentlogic,1
class=djms.businesslogic.base.baselogic,interface=djms.businesslogic.base.ibaselogic,1
logic接口及实现个数为:10
然后批量注入并测试,测试一切正常
网友评论