【问题标题】:C# asp.net core generic factory method dependency injectionC# asp.net core 泛型工厂方法依赖注入
【发布时间】: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


【解决方案1】:

您可以在此处使用的一种解决方案是为您的控制器实现通用基类。在您的通用控制器库中,您可以设置一个属性来保存您的存储库。这在将 ASP.Net Core 用作 Web API 时效果很好。

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2021-01-16
    • 2019-06-05
    • 1970-01-01
    • 2012-08-09
    相关资源
    最近更新 更多