public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ILoginUserManager, LoginUserManager>();
services.AddTransient<IRegisterManager, RegisterManager>();
services.AddTransient<IBusinessInvoiceInfoManager, BusinessInvoiceInfoManager>();
//...
}
整整几百行,看着不太舒服,而且每次添加新服务,都需要手动注入一下。就改了一下,从程序集中加载
Dictionary<Type, Type[]> keyValueBusiness = GetClassName("CKB.Business");
foreach (var item in keyValueBusiness)
{
foreach (var typeArray in item.Value)
{
services.AddTransient(typeArray, item.Key);
}
}
public Dictionary<Type, Type[]> GetClassName(string assemblyName)
{
if (!String.IsNullOrEmpty(assemblyName))
{
AssemblyName assName = new AssemblyName(assemblyName);
Assembly assembly = Assembly.Load(assName);
List<Type> ts = assembly.GetTypes().ToList();
var result = new Dictionary<Type, Type[]>();
foreach (var item in ts)
{
Type[] interfaceType = item.GetInterfaces();
if (interfaceType.Length == 0)
{
continue;
}
//移除不需要注入的
//List<Type> temp = interfaceType.ToList();
//temp.RemoveAll(t => t.Name == "IDisposable");
//interfaceType = temp.ToArray();
result.Add(item, interfaceType);
}
return result;
}
return new Dictionary<Type, Type[]>();
}