【问题标题】:How should I pass parameters to the Autofac container for auto dependency resolution via Autofac.Dependency injection lib我应该如何通过 Autofac.Dependency injection lib 将参数传递给 Autofac 容器以进行自动依赖解析
【发布时间】:2018-10-28 02:50:01
【问题描述】:

这就是问题所在。我目前正在使用 Autofac 在我的 AspNetCore MVC 应用程序中使用 TypedParameters 解决所有依赖项,但我认为我做错了,我可以做得更干净。

以下是以下代码示例

  • 服务配置。
  • 要注入的示例存储库
  • 当前使用的方法
  • 我想做的事

配置:

public static void Configure(IConfiguration cfg,IServiceCollection services)
    {
        /// some code is skipped here. Module registrant is just pulling out 
        /// the services from dlls and register them. 
        ioCBuilder.Populate(services);
        ioCBuilder.RegisterModule(new ModuleRegistrant(cfg, registrantOptions));

        IoCHelper.Container = ioCBuilder.Build();
    }

示例存储库:

public class PriorityRepository: IPriorityRepository   
{
    public PriorityRepository(DbContext db)
    {
        Db = db;
    }

    /// <inheritdoc />
    public Priority GetDefault()
    {
        return Db.Set<Priority>().SingleOrDefault(it => it.IsDefault);
    }
}

目前我获得以下存储库:

public class PriorityController: Controller
{
    public PriorityController(TestContext db)
    {  
       var ctxParam = new TypedParameter(typeof(DbContext), db);
       PriorityRepository = IoCHelper.Container.Resolve<IPriorityRepository>(ctxParam);  
    }
    public IPriorityRepository PriorityRepository { get; set;} 
}

我希望它是这样的

public class PriorityController: Controller
    {
        public PriorityController(IPriorityRepository priorityRepo)
        {  
           PriorityRepository = priorityRepo;
        }
        public IPriorityRepository PriorityRepository { get; set;} 
    }

所以基本上问题是:如何在构造函数中注入已经注册的类型略有不同(更抽象)的类型?

【问题讨论】:

  • 嗨,我对你的问题有点困惑。您的问题是否反映在提供的最后一个 sn-p 代码中?因为最后一个 sn-p 看起来是正确的。 “更抽象”的注册类型是什么意思?
  • 如果您的意思是 IPriorityRepository 并且您注册了此接口的唯一一个实现,那么您无需执行任何操作,它应该可以开箱即用。
  • 我已经注册了依赖TestDbContext,它继承了DbContextIPrioriryRepository -&gt; PriorityRepository 的实现接受参数DbContext。它将与无参数构造函数一起使用,但它不适用于带参数的构造函数。所以我有一个问题:怎么办,所以我只注入存储库而不调用Autofac中的Context.Resolve方法

标签: c# asp.net-mvc asp.net-core-mvc autofac asp.net-core-mvc-2.1


【解决方案1】:

Func 用于解析 Autofac 中的参数化依赖关系。

请通过链接https://autofaccn.readthedocs.io/en/latest/resolve/relationships.html#parameterized-instantiation-func-x-y-b 了解实施细节和其他可用选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    相关资源
    最近更新 更多