使用Ninject将信息从HttpContext注入到构造函数中

时间:2016-11-16 14:55:23

标签: c# ninject inversion-of-control httpcontext

我们正在使用的项目中有一些表,其中一个标准是让所有表都包含一些用于审计的字段。我已经在我的数据层中设置了一种方法,可以在发生数据库提交时自动记录这两个字段。但是我需要从HttpContext中获取用户名。我的数据层基本上是这样设置的:

    public UnitOfWork(DataContext dataContext, IUserIdentity identity)
    {
        //Misc
        _dataContext = dataContext;
        EntryNm = identity.UserId;

        //Repositories
        SomeRepository = new SomeRepository(dataContext);
     }

Ninject绑定

        kernel.Bind<DataContext>().ToSelf().InRequestScope();
        kernel.Bind<IUserIdentity>().To<UserIdentity>();
        kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();

的UserIdentity

public interface IUserIdentity
{
    string UserId { get; }
}

public class UserIdentity : IUserIdentity
{
    public string UserId
    {
        get
        {
            return HttpContext.Current.User.Identity.Name;
        }
    }
}

但是当我运行程序时,我总是从identity.UserId而不是当前标识中获取一个空字符串。我对依赖注入很新,但是我希望它能够工作的方式是在每个请求中使用上下文创建UnitOfWork,该上下文也应该从当前HTTPContext传入UserId。

0 个答案:

没有答案