рдирдорд╕реНрддреЗ, рдореБрдЭреЗ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рд╣реИ
public void ConfigureServices(IServiceCollection services)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToArray();
RegisterRepositories(ref services, assemblies);
}
private void RegisterRepositories(ref IServiceCollection services, Type[] assemblies)
{
var interfaceT = typeof(IRepository);
foreach (var t in assemblies.Where(x => interfaceT.IsAssignableFrom(x) && x != interfaceT))
{
services.AddTransient(t);
}
}
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЖрдИрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА (рдорд╛рд░реНрдХрд░/рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ! рдореБрдЭреЗ рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЕрдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдЕрдкрд╡рд╛рдж: 'MyProject.Core.Repositories.MenuRepository' рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде 'MyProject.Controllers.MenuController' рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордпред
рдореЗрд░рд╛ рдореЗрд░рд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреМрди рд╕рд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрдВрдбрд╛рд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рддреЛ DI рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ
public void ConfigureServices(IServiceCollection services)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToArray();
// Register Repositories
var interfaceT = typeof(IRepository);
foreach (var t in assemblies.Where(x => interfaceT.IsAssignableFrom(x) && x != interfaceT))
{
services.AddTransient(t);
}
}
рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ/рдкреНрд░рд╢реНрди рд╣реИрдВ:
ref
рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ services
рдкреИрд░рд╛рдореАрдЯрд░ рдХрднреА рднреА рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИMenuController
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?MenuRepository
рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ?@Eilon рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдХреЛрдб рд╡рд╛рд▓рд╛ рднрдВрдбрд╛рд░ рд╣реИ:
https://github.com/SherifRefat/aspnet-DependencyInjection-Issue-612
@SherifRefaat рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛрдб рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдерд╛? рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдИ рд▓реЛрдбреЗрдб рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрд╕реЗрдВрдмрд▓реА рд╕рднреА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рд╣реА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ MyProject.Core рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИред
@davidfowl рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм GetAssemblies()
рдХреЛ IRepository
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рднреА рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП MyProject.Core
рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдБ?
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var projectTypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToList();
RegisterFromBaseType(services, typeof(IRepository), projectTypes);
}
private void RegisterFromBaseType(IServiceCollection services, Type type, List<Type> allTypes)
{
foreach (var t in allTypes.Where(x => type.IsAssignableFrom(x) && x != type))
{
services.AddTransient(t);
}
}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, @davidfowl рдиреЗ рдореЛрдиреЛ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджрд┐рдП рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХрдИ рдирд┐рд╖реНрдкрд╛рджрди рдореЛрдб (рдпрд╛рдиреА рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЛрдб) рд╣реИрдВ?
@SherifRefaat рд╕рдВрднрд╡рддрдГ, рд▓реЛрдб рдХреА рдЧрдИ рдЕрд╕реЗрдВрдмрд▓реА рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЧреИрд░ рдирд┐рдпрддрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЧрд▓рддреА рд╣реИред
рдЬрдм рдЖрдк ConfigureServices рдореЗрдВ typeof(IRepository)
рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ JITed рд╡рд┐рдзрд┐ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@SherifRefaat рд╕рдВрднрд╡рддрдГ, рд▓реЛрдб рдХреА рдЧрдИ рдЕрд╕реЗрдВрдмрд▓реА рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЧреИрд░ рдирд┐рдпрддрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЧрд▓рддреА рд╣реИред
рдЬрдм рдЖрдк ConfigureServices рдореЗрдВ
typeof(IRepository)
рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ JITed рд╡рд┐рдзрд┐ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред