首页 > 解决方案 > 如何将参数传递给 .NET 5 中的作用域服务?

问题描述

我有一些 .Net 代码需要迁移到 .NET 5。具体来说,我正在注册一些服务。我已经迁移了大部分服务,除了那些需要传递参数的服务。我的旧代码如下所示:

private void RegisterItem<T>(ContainerBuilder builder) where T : Item
{
  builder
    .RegisterType<StoreItem<T>>()
    .As<IItem<T>>()
    .WithParameter(ResolvedParameter.ForNamed<IStore>(nameof(MyContext)))
    .InstancePerLifetimeScope()
  ;
}

我试图修改上面的代码以使用:

services.AddScoped<IItem<T>, StoreItem<T>>();

但是,这不会传入在原始实现中设置的参数。我的问题是,如何将参数传递给 ASP.NET Core 中的范围服务?

标签: c#asp.net-coredependency-injectionautofac

解决方案


只需将它们作为参数添加到您的构造函数中,它们将由依赖注入引擎解析:

public StoreItem(IStore store)
{
   ...
}

请注意,IStore还必须注册:

services.AddScoped<IStore, MyStore>();

推荐阅读