哪种方式更好地传输请求数据(两种方式之间有什么区别)?
例如:
选项1(Scoped Service
):
//Scoped Service(this may be interface)
public class SampleScopedService
{
public string Data { get; set; }
}
//Register service
services.AddScoped<SampleScopedService>();
//Set and Get Data
public class SampleUsage
{
private readonly SampleScopedService _sampleScopedService;
public SampleUsage(SampleScopedService sampleScopedService)
{
_sampleScopedService = sampleScopedService;
// _sampleScopedService.Data = "Sample";
// _sampleScopedService.Data
}
}
选项2(HttpContext.Items
)
//Scoped Service
public class SampleScopedService
{
private readonly IHttpContextAccessor _accessor;
public SampleScopedService(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
public string GetData()
{
return (string)_accessor.HttpContext.Items["Data"];
}
}
//Register service
services.AddScoped<SampleScopedService>();
//Set Data
HttpContext.Items[“Data”] = ”Sample”;
//Get Data
public class SampleUsage
{
private readonly SampleScopedService _sampleScopedService;
public SampleUsage(SampleScopedService sampleScopedService)
{
_sampleScopedService = sampleScopedService;
//_sampleScopedService.GetData();
}
}
答案 0 :(得分:5)
根据docs:
避免将数据和配置直接存储在DI中。例如,a 通常不应将用户的购物车添加到服务中 容器。配置应使用选项模型。同样的, 避免仅存在允许访问某些对象的“数据持有者”对象 其他对象。如果,最好通过DI请求实际需要的项目 可能的。
由于选项1 是“数据持有者”的示例,我们应尽可能避免使用。
此外,如果您不注意,选项1 可能会导致Captive Dependency。
因此,使用选项2 与单身生命周期比使用选项1 更好。