接上篇,如何使用原生依赖注入
#region ==========【自定义函数】==========
/// <summary>
/// 自动注册
/// </summary>
/// <param name="services"></param>
public void AutoInjectService(IServiceCollection services)
{
Assembly currentAssembly = typeof(Startup).Assembly;
Type baseType = typeof(IBaseService);
List<Type> types = currentAssembly.GetTypes().Where(it => baseType.IsAssignableFrom(it)).ToList();
foreach (var item in types.Where(it => !it.IsInterface))
{
Type[] interfaceType = item.GetInterfaces();
foreach (var inf in interfaceType)
{
if (inf.Name.Contains(item.Name))
{
services.AddTransient(inf, item);
}
}
}
}
#endregion
我们需要新建一个名为‘IBaseService’的接口,还要新建一个名为‘BaseService’的服务,BaseService这个服务需要继承一下IBaseService接口还需要继承一下数据库公共文上下类。这样的话,以后的所有服务只需要继承一下BaseService服务,所有的接口只需要继承一下IBaseService接口,即可实现自动注册。
但是目前我在思考的是services.AddTransient(inf, item);
是瞬时的,而我们的BaseService服务又继承了数据库公共文上下类,这样会不会造成资源浪费,有没有好的解决办法。