【问题标题】:Multiple implementations of Dependency Injection - ASP.NET Core依赖注入的多种实现 - ASP.NET Core
【发布时间】:2020-08-26 08:00:53
【问题描述】:

我有一个接口IRepository<TEntity> 和一个通用存储库Repository<TEntity, TContext>GameRepositoryUserRepository 是从 Repository<TEntity, TContext> 扩展而来的。我不想手动添加存储库,而是想在一行中完成。我已经尝试过 answer 中的单行解决方案,但它似乎不适用于我的情况。

        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers();

            services.AddDbContext<ApplicationDBContext>(options =>
                options.UseMySql(Configuration.GetConnectionString("DefaultConnection"))
            );

            services.AddScoped<GameRepository>();
            services.AddScoped<UserRepository>();
        }

【问题讨论】:

  • 你的意思是你只想用一行来注册GameRepository和UserRepository?在我看来,我们不能这样做,因为 GameRepository 和 UserRepository 是不同的类。我们无法使用 DI 在您的服务中新建两个不同的类。
  • 还有哪些其他解决方案可以做类似的事情?

标签: dependency-injection asp.net-core-mvc


【解决方案1】:

还有哪些其他解决方案可以做类似的事情?

据我所知,没有办法做类似的事情,如果你还想使用一条线,我建议你可以考虑创建一个服务连接扩展方法。

您可以创建如下所示的 ServicesConfiguration 类:

public static class ServicesConfiguration
{
    public static void AddCustomServices(this IServiceCollection services)
    {
        services.AddScoped<GameRepository>();
        services.AddScoped<UserRepository>();
    }
}

那么你就可以只用一行来注册这个服务了:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddCustomServices();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多