【问题标题】:pass interface implementation to a method and invoke AddTransient将接口实现传递给方法并调用 AddTransient
【发布时间】:2021-07-28 14:42:21
【问题描述】:

如何将类/类型传递给配置 IServiceCollection 并添加临时服务的方法?我有一个通用的方法,但是如何传递接口的实现?

TDBContextAccessor 将始终是一个接口。所以我想传递接口和它的实现。

代码:

public class CustomDB<TDBContext, TDBContextAccessor> : CustomDB<TDBContext>, ICustomDB<TDBContext, TDBContextAccessor> where TDBContext : DbContext where TDBContextAccessor : class
{
    private readonly TDBContextAccessor _accessor;

    public CustomDB(string connectionString, TDBContextAccessor accessor) : base(connectionString)
    {
        _accessor = accessor;
    }

    public IServiceCollection ConfigureDBContext(IServiceCollection services, TDBContextAccessor accessor)
    {
        return services
            .AddEntityFrameworkSqlServer()
            .AddDbContext<TDBContext>(opt => opt.UseSqlServer(this.ConnectionString))
            .AddTransient<TDBContextAccessor>();
    }
}

我试过了

.AddTransient<TDBContextAccessor, typeof(accessor)>()

但这不起作用。如何传递定义的 TDBContextAccessor 的实现?

【问题讨论】:

    标签: c# asp.net-core generics datacontext


    【解决方案1】:

    根据您的代码,我发现您将typeof(accessor) 作为 TDBContextAccessor 的 impelmenttype 传递。但是typeof(accessor) 的值仍然是 TDBContextAccessor,这意味着代码应该是这个.AddTransient&lt;TDBContextAccessor, TDBContextAccessor &gt;()

    正确的方式应该是.AddTransient&lt;TDBContextAccessor, TheClasswhichhasalreadyimpletenttheTDBContextAccessor&gt;()

    更多关于如何使用AddTransient,你可以参考这个document

    【讨论】:

    • typeof(accessor) 甚至不会编译
    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    相关资源
    最近更新 更多