我正在将.NET框架项目迁移到.NET 6中。我们在.NET框架项目中使用Autofac作为DI,并期待移动MS.DI。在现有的项目中,有一种在运行时解析对象时传递构造函数参数的方法,我正在寻找一种在MS DI中这样做的方法。
示例:
public interface IMemberProvider
{
long MemberId { get; }
}
public class FixedMemberProvider : IMemberProvider
{
public MemberProvider(long memberId)
{
MemberId = memberId;
}
public long MemberId { get; set; }
}我是这样注册的,
builder.RegisterType<FixedMemberProvider>().As<IMemberProvider>()
.InstancePerLifetimeScope();无论是在中间件还是在任何地方我都是这样解决的,
using var messageScope = _lifetimeScope.BeginLifetimeScope();
if (!string.IsNullOrEmpty(message.MemberId))
messageScope.Resolve<IMemberProvider>(
new TypedParameter(typeof(string), message.MemberId));因此,在这个范围内,我可以访问GetMemberId()方法。有人能帮助微软DI完成这个任务吗?
发布于 2022-02-22 13:11:34
如果您试图在ASP.NET核心中使用依赖项注入,则可以读取这。
下面是一个关于构造器方法注入的演示,您可以参考它。
ICounter.cs:
public interface ICounter
{
int Get();
}Counter.cs:
public class Counter : ICounter
{
private int _count;
public int Get()
{
return _count++;
}
}在Program.cs中添加以下内容:
builder.Services.AddScoped(typeof(ICounter), typeof(Counter));Controller.cs:
public class HomeController : Controller
{
private ICounter _counter;
public HomeController(ICounter counter)
{
_counter = counter;
}
public IActionResult Index()
{
int count = _counter.Get();
ViewBag.Count = count;
return View();
}
}使用中间件中的作用域对象,可以在InvokeAsync方法中注入所需的对象。TestCounterMiddleware.cs:
public class TestCounterMiddleware
{
private RequestDelegate _next;
public TestCounterMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context,ICounter counter)
{
int count = counter.Get();
await _next(context);
}
}在Program.cs中添加以下内容:
app.UseMiddleware<TestCounterMiddleware>();结果:

https://stackoverflow.com/questions/71220228
复制相似问题