使用 Ninject 将 userId 从 WebUI 传递到 DAL
Pass userId from WebUI to DAL using Ninject
我有一个 3 层应用程序:WebUI、BLL 和 DAL。我需要使用 Ninject 从 WebUI 层将 UserId 传递给 DAL。组合根位于 WebUI 层。
WebUI依赖于BBL,BLL依赖于DAL。
所以问题是如何将 userId 从 WebUI 传递到 BLL,然后再传递到 DAL。当用户通过身份验证时,我需要传递 UserId,如果未通过身份验证 - 传递 null。
在组合根目录(WebUI)中
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ICTOFacade>().To<CTO_Facade>().InRequestScope();
}
在 BLL 中:
public class ServiceModule : NinjectModule
{
public override void Load()
{
Bind(typeof(ISingleEntityRepository<>)).
To(typeof(GenericRepository<>)).InRequestScope();
Bind(typeof(IMultipleEntitiesRepository<>)).
To(typeof(GenericRepository<>)).InRequestScope();
}
}
public class CTO_Facade : ICTOFacade
{
private ISingleEntityRepository<CargoTransportationOrderModel> _ctoRepoSingle;
private IMultipleEntitiesRepository<CargoTransportationOrderModel> _ctoRepoMultiple;
public CTO_Facade(ISingleEntityRepository<CargoTransportationOrderModel> singleRepo,
IMultipleEntitiesRepository<CargoTransportationOrderModel> multipleRepo)
{
在 DAL 中:
public sealed class GenericRepository<T> : ISingleEntityRepository<T>, IMultipleEntitiesRepository<T> where T : BaseModel
{
private string _userId;
#region Helpers
public GenericRepository(string userId)
{
_userId = userId;
}
...
对此还有其他解决方案,但我会向您建议一种更简单的方法,注入这样的复杂类型:
public class UserDTO
{
public string Id {get; set;}
...
}
然后在 repo 的构造函数中:
public sealed class GenericRepository<T> : ISingleEntityRepository<T>, IMultipleEntitiesRepository<T> where T : BaseModel
{
private UserDTO _currentUser;
public GenericRepository(UserDTO user)
{
_currentUser = user;
}
...
}
正在设置 Bind
:
private static void RegisterServices(IKernel kernel)
{
...
kernel.Bind<UserDTO>().ToMethod(ctx => new UserDTO { Id = HttpContext.Current.User.Identity.GetUserId() }).InRequestScope();
}
So i belive that you want to make some default filter or setting default values in your repo, with this _currentUser.Id
you can get the id of the current user.
我有一个 3 层应用程序:WebUI、BLL 和 DAL。我需要使用 Ninject 从 WebUI 层将 UserId 传递给 DAL。组合根位于 WebUI 层。 WebUI依赖于BBL,BLL依赖于DAL。
所以问题是如何将 userId 从 WebUI 传递到 BLL,然后再传递到 DAL。当用户通过身份验证时,我需要传递 UserId,如果未通过身份验证 - 传递 null。
在组合根目录(WebUI)中
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ICTOFacade>().To<CTO_Facade>().InRequestScope();
}
在 BLL 中:
public class ServiceModule : NinjectModule
{
public override void Load()
{
Bind(typeof(ISingleEntityRepository<>)).
To(typeof(GenericRepository<>)).InRequestScope();
Bind(typeof(IMultipleEntitiesRepository<>)).
To(typeof(GenericRepository<>)).InRequestScope();
}
}
public class CTO_Facade : ICTOFacade
{
private ISingleEntityRepository<CargoTransportationOrderModel> _ctoRepoSingle;
private IMultipleEntitiesRepository<CargoTransportationOrderModel> _ctoRepoMultiple;
public CTO_Facade(ISingleEntityRepository<CargoTransportationOrderModel> singleRepo,
IMultipleEntitiesRepository<CargoTransportationOrderModel> multipleRepo)
{
在 DAL 中:
public sealed class GenericRepository<T> : ISingleEntityRepository<T>, IMultipleEntitiesRepository<T> where T : BaseModel
{
private string _userId;
#region Helpers
public GenericRepository(string userId)
{
_userId = userId;
}
...
对此还有其他解决方案,但我会向您建议一种更简单的方法,注入这样的复杂类型:
public class UserDTO
{
public string Id {get; set;}
...
}
然后在 repo 的构造函数中:
public sealed class GenericRepository<T> : ISingleEntityRepository<T>, IMultipleEntitiesRepository<T> where T : BaseModel
{
private UserDTO _currentUser;
public GenericRepository(UserDTO user)
{
_currentUser = user;
}
...
}
正在设置 Bind
:
private static void RegisterServices(IKernel kernel)
{
...
kernel.Bind<UserDTO>().ToMethod(ctx => new UserDTO { Id = HttpContext.Current.User.Identity.GetUserId() }).InRequestScope();
}
So i belive that you want to make some default filter or setting default values in your repo, with this
_currentUser.Id
you can get the id of the current user.