【发布时间】:2018-04-04 22:16:28
【问题描述】:
我正在使用 asp.net 核心,将我的服务添加到依赖注入时,我有以下情况:
// TODO Need to have generalized code for following Repositories
services.AddScoped(s => s.GetRequiredService<IRepositoryFactory>().CreateRepository<Customer>(services));
services.AddScoped(s => s.GetRequiredService<IRepositoryFactory>().CreateRepository<CustomerCategory>(services));
services.AddScoped(s => s.GetRequiredService<IRepositoryFactory>().CreateRepository<SaleOrder>(services));
在这种情况下,我明确提到“T”,当模型增长时会让人头疼,我的 CreateRepository 方法如下:
public IRepository<T> CreateRepository<T>(IServiceCollection services) where T : class
{
if (typeof(T).IsAssignableFrom(typeof(IAuditable)))
return _provider.GetRequiredService<AuditableRepository<T>>();
else if (typeof(T).IsAssignableFrom(typeof(IArchivable)))
return _provider.GetRequiredService<ArchivableRepository<T>>();
//return new Repository<T>(_provider.GetRequiredService<DbContext>());
return _provider.GetRequiredService<Repository<T>>();
}
我想要一些类似的东西:
services.TryAdd(ServiceDescriptor.Scoped(typeof(IRepository<>), s.GetRequiredService<IRepositoryFactory>().CreateRepository<>(services)));
提前感谢。
【问题讨论】:
-
你在使用实体框架吗?如果是这样,您根本不需要存储库模式。跳过它并编写服务。
标签: dependency-injection asp.net-core repository-pattern