1

我正在为我的 .NET Core 项目使用存储库模式。我有一个基础存储库:

public abstract class RepositoryBase<T> : IRepositoryBase<T> where T : class
{
    protected DbContext MyContext { get; set; }

    public RepositoryBase(DbContext context)
    {
        MyContext = context;
    }

}

然后我有从基类派生的实体特定存储库。例如:

   public class ClientRepository : RepositoryBase<Client>, IClientRepository
{
    public ClientRepository(DbContext context)
       : base(context)
    {
    }

然后我有一个存储库包装器,它实例化所有这些实体特定的存储库。

我想让我的所有存储库访问我的记录器,我通过依赖注入配置了它。但是,我的记录器似乎需要一种类型,例如

ILogger<ClientRepository>

我以通用形式将记录器添加到基类中,在实体类中我做了 ILogger 的特定形式。但是,在存储库包装器构造函数中,我现在需要声明并注入所有这些不同类型的 ILogger。在构建存储库包装器的任何地方,我都需要将所有这些都添加为 args。

任何人都可以澄清注入 ILogger 的正确方法,并可以通过抽象类和派生类将其移动到“下游”吗?

4

1 回答 1

0

有两种选择。我不知道有什么实际区别。

选项 AILogger

ILogger<T>是一个ILogger

public interface ILogger<out TCategoryName> : ILogger

您的基础回购可以接受ILogger.

选项 BILogger<BaseClass>

ILogger<DerivedClass>ILogger<BaseClass>在您的情况下ILogger<ClientRepository>也是如此ILogger<RepositoryBase<Client>>

基础回购可以接受ILogger<RepositoryBase<Client>>

于 2021-04-16T03:32:10.333 回答