【发布时间】:2016-06-27 23:32:48
【问题描述】:
当一个 http 请求进来时,我想实例化一个类并将这个实例传递给任何需要它的类。
例如,我有一个具有两个属性的自定义 Customer 类。基于请求参数和业务逻辑,我想设置 Actions 属性,并且任何需要此类的控制器或存储库都应该有权访问 Actions 属性。我无法使用“AddInstance”,因为 ConfigureServices 方法无权访问当前请求。
CustomerClass.cs
public class CustomerClass
{
public string UserName{get;set;}
public string Actions{get;set;}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<CustomerClass, CustomerClass>();
}
public void Configure(IApplicationBuilder app, CustomerClass cs)
{
app.Use((context, next) =>
{
cs.UserName = context.User.Identity.Name;
// cs.Actions = BUSINESSLOGICBASEDONREQUEST
return next();
});
}
控制器
public class CustomerController : Controller
{
CustomerClass _local;
public CustomerController(CustomerClass cls)
{
// here, I expect to use the class instantiated in Startup.cs >
// Configure method since I set the CustomerClass to have "Scoped"
// life span. However, a new Customer class instance is being
// requested.
}
}
【问题讨论】:
-
也许将一种 CustomerCreator 类放入依赖注入一次并让它在需要时建立客户会是一个更好的主意。 CustomerCreator 可以通过 DI 访问 HttpContext:stackoverflow.com/questions/31243068/…
-
感谢您的链接。那行得通!但是,即使我使用的是 AddScoped,我也不确定为什么 CustomerClass 会被调用两次。
-
@Flynn 谢谢你的建议!!
标签: dependency-injection asp.net-core