【发布时间】:2020-04-29 22:33:48
【问题描述】:
我想将全局自定义数据从 API 级别传递到应用程序服务、存储库和数据库上下文层,而不在每个方法中使用参数。
1) 一种方法是HttpContextAccessor。
想知道 Net Core 中是否嵌入了任何其他全局参数,或者这是唯一已知的策略?我们正在传递可审计数据、CreateBy、ModifiedDate,但可能会扩展它的其他属性。我们有 100 多个 api、应用程序方法、存储库,并试图防止传递参数。
_httpContextAccessor.HttpContext.Items["TestKey"] = "SampleData";
DBContext:
public class AuditableDbContext: DbContext
{
private readonly IHttpContextAccessor _httpContextAccessor;
public AuditableDbContext(DbContextOptions<AuditableDbContext> options, IHttpContextAccessor httpContextAccessor)
: base(options)
{
_httpContextAccessor = httpContextAccessor;
}
自定义数据会根据应用程序行为和用户交互而变化。
【问题讨论】:
-
您希望传递给应用程序的数据是静态的,还是会根据应用程序行为或用户交互而改变?
-
嗨@NikP 正确,它会根据应用程序行为和用户交互而变化
-
请参阅@MichaC 对此的回答,这正是我要表达的意思,但他打字速度更快。全局状态通常不好,可能会导致一些非常令人沮丧的错误和不可预测的行为,并将所有内容耦合在一起。他是对的,跟随他的领导。
-
@NikP 这是个好策略吗? stackoverflow.com/questions/36401026/…
-
这真的取决于你的应用需求。我仍然认为您最好使用下面的答案,并使用一些智能多态性来改变这里和那里的行为。如果您只是涉及大量层并且它是站不住脚的,请考虑一下。你可能不需要那么多层,但你可能确实需要。请注意那些实际上什么都不做的层,只是将信息从上层传递到下层,反之亦然。如果没有代表重要、有用且一致的抽象层,我通常会尝试消除它。
标签: c# .net entity-framework asp.net-core .net-core