- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设置 MVC 5、WebApi 2、 Entity Framework 解决方案。我想在数据库中插入审核字段,而无需每次都编写样板代码来执行此操作。我的数据库实体位于引用 EntityFramework 的自己的单独项目中。
到目前为止我已经:
public class MyDbContext : IdentityDbContext<ApplicationUser>
{
public MyDbContext(/*Autofac can inject stuff here*/)
{
}
public override int SaveChanges()
{
// Updates ModifiedBy, CreatedBy, ModifiedOn, CreatedOn fields
DbContextHelper.TrackSaveChanges(ChangeTracker, userName);
return base.SaveChanges();
}
}
TrackSaveChanges()
里面的逻辑并不重要,这只是循环所有更改的实体并设置字段的值。没什么太聪明的。问题是得到
userName
在我的里面DbContext
派生类。我认为最好的方法是将其注入(inject)MyDbContext
构造函数?有使用
HttpContext.Current.User
的建议,但我不想向我的数据项目添加 Web 依赖项。也可以直接引用HttpContext
会损害单元可测试性。
- 我已经尝试过 Autofac
builder.Register<IPrincipal>(ip => HttpContext.Current.User);
注入(inject)IPrincipal
到 dbcontext 中,但这会引发异常,因为 HttpContext.Current.User 在创建时为 null。- 如果必须的话,我更愿意使用
HttpContextBase
代替HttpContext
.有没有一种干净的方法可以做到这一点?我正在使用 Entity Framework 6、WebAPI 2、ASP NET Identity 和 Autofac。
最佳答案
您可以注入(inject)一个接口(interface)而不是字符串
值本身:
interface IUserNameProvider
{
string GetUserName();
}
具体实现将使用HttpContext.Current.User
,但这种方法不会损害可测试性,因为接口(interface)可以轻松模拟。
interface HttpContextUserNameProvider : IUserNameProvider
{
public string GetUserName()
{
return HttpContext.Current.User;
}
}
客户端代码示例:
public class MyDbContext : IdentityDbContext<ApplicationUser>
{
internal IUserNameProvider _userNameProvider;
public MyDbContext(IUserNameProvider userNameProvider)
{
_userNameProvider = userNameProvider;
}
public override int SaveChanges()
{
string userName = _userNameProvider.GetUserName();
// ...
}
}
关于asp.net-mvc - 将用户名注入(inject) dbContext( Entity Framework 6)以自动更新列 ModifiedBy/CreatedBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081634/
我正在尝试使用 Graphcool 为我们的产品设计后端。我们已经有了产品的领域模型。 我面临的问题是非标量属性,我被迫使用@relation(这也是双向关系)。 帮我设计一下下面的案例 # proj
我正在尝试使用客户端对象模型更新 Sharepoint 讨论区中的“ModifiedBy”字段。通过更改“Editor”和“Author”字段,我可以更改出现在 ListView 中的“Modifie
我想自动设置我的 DomainClasses 的 modifiedBy 和 createdBy 属性。 为此,我将 Bootstrap.grooy 更改为: import org.codehaus.g
我有一个带有 UI、业务(实体)和数据 (DbContext) 层的 ASP.NET MVC3 Web 应用程序。我首先使用 Entity Framework 4.1 代码。现在,我正在覆盖数据层中的
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我正在设置 MVC 5、WebApi 2、 Entity Framework 解决方案。我想在数据库中插入审核字段,而无需每次都编写样板代码来执行此操作。我的数据库实体位于引用 EntityFrame
我是一名优秀的程序员,十分优秀!