Dependency injection 针对dotnet核心的接口进行程序集扫描和注册类
请参阅以下代码:Dependency injection 针对dotnet核心的接口进行程序集扫描和注册类,dependency-injection,asp.net-core,.net-assembly,Dependency Injection,Asp.net Core,.net Assembly,请参阅以下代码: public interface IUserRepository:IRepository<User> { } public abstract class GenericRepository<TEntity,Tkey>:IRepository<TEntity>,IDisposable where TEntity:BaseEntity<Tkey> where Tkey:class public class UserRepos
public interface IUserRepository:IRepository<User>
{
}
public abstract class GenericRepository<TEntity,Tkey>:IRepository<TEntity>,IDisposable
where TEntity:BaseEntity<Tkey>
where Tkey:class
public class UserRepository : GenericRepository<User, string>, IUserRepository
{
public UserRepository(SecurityDb dbContext) : base(dbContext)
{
}
}
此代码无法正常工作。请添加异常详细信息,因为不清楚哪些内容无法正常工作此代码正常工作,但结果未如我想象的那样显示请添加异常详细信息,因为不清楚哪些内容无法正常工作此代码正常工作,但结果未如我想象的那样显示
public static IServiceCollection AddIgidiaService(this IServiceCollection service,IEnumerable<Assembly> Assemblies)
{
var types= Assemblies.SelectMany(a=>a.ExportedTypes).ToArray();
var repositories= types.Where(t=>typeof(GenericRepository<,>).GetTypeInfo().IsAssignableFrom(t.GetTypeInfo()))
.Where(t => !t.GetTypeInfo().IsAbstract);
var irepositories=types.Where(t=>typeof(IRepository<>).GetTypeInfo().IsAssignableFrom(t.GetTypeInfo()))
.Where(t=>t.GetTypeInfo().IsInterface);
foreach (var repository in repositories)
{
foreach (var irepositoriy in irepositories)
{
if (repository.GetTypeInfo().IsInstanceOfType(irepositoriy))
{
service.AddScoped(repository,irepositoriy);
}
}
}
return service;
}