C#/.net 服务容器启动时自动注册服务
在应用启动时,使用C#的反射功能,搜索并注册某些类为服务。
·
在使用依赖注入等IoC工具时,每添加一个服务都需要在应用启动处添加一句“services.Add...”。
如果有大量同类(有相同基类/接口)的服务,为了避免这种麻烦,可以使用C#的反射功能,自动注册某些类为服务。
例如:项目中有大量的xxxValidator,且它们都实现IValidator接口,则可以用如下代码自动寻找并注册所有Validator。
//获取目标程序集(这里是当前程序集)
Assembly assembly = Assembly.GetExecutingAssembly();
//目标类型(这里是IValidator)
Type validatorType = typeof(IValidator);
//使用linq筛选出程序集中所有目标类型的实现/派生
var validators = assembly.GetTypes()
.Where(x => !x.IsAbstract)
.Where(validatorType.IsAssignableFrom)
.ToList();
validators.ForEach(t =>
{
//注册每个类(根据服务的特性选择Transient/Scoped/Singleton)
services.AddScoped(t);
});
如果需要精准控制每个服务是Scoped还是Singleton,可以使用自定义的Attribute标注服务类,然后在循环里判断一下即可。
局限性:由于是一股脑全部获取,无法注册为 Add<Ixxx, xxx>的形式 。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)