You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
using Microsoft.Extensions.DependencyInjection;
|
|
using Tiobon.Core.Repository.Base;
|
|
|
|
namespace Tiobon.Core.Services.Extensions;
|
|
|
|
public static class AppServiceExtensions
|
|
{
|
|
public static IServiceCollection AddAppServices(this IServiceCollection services)
|
|
{
|
|
services.AddScoped(typeof(IBaseRepository<>), typeof(BaseRepository<>));
|
|
var types = Assembly.GetExecutingAssembly().GetTypes();
|
|
|
|
var assignedTypes = types
|
|
.Where(m => m.GetBaseClasses().Length > 1)
|
|
.ToList();
|
|
|
|
foreach (var assignedType in assignedTypes)
|
|
{
|
|
if (assignedType == typeof(BaseServices<,,,>))
|
|
{
|
|
continue;
|
|
}
|
|
// 添加 XXXService 依赖注入
|
|
services.AddScoped(assignedType);
|
|
|
|
// 添加 IXXXService -> XXXService 依赖注入
|
|
var interfaceType = assignedType.GetInterfaces().FirstOrDefault(i => i.Name[1..] == assignedType.Name);
|
|
if (interfaceType != null)
|
|
{
|
|
services.AddScoped(interfaceType, assignedType);
|
|
}
|
|
}
|
|
|
|
return services;
|
|
}
|
|
}
|
|
|