我正在开发一个桌面应用程序,该应用程序生成了用于数据库访问的代码,并使用静态对象进行用户标识。
现在我们需要通过webservice公开一些逻辑,并且我们正在寻找最小侵扰的形式来将用户信息向下推到数据库访问类。
我们想到的是传递一个委托给Insert/Update方法,看起来像这样:
public delegate string GetLogin();
public class BaseEntity : BaseNotifiableEntity, System.ComponentModel.IDataErrorInfo
{
public GetLogin Login { get; set; }
(...)
}
public static class BaseEntityHelper
{
public static SqlCommand buildUpdateCommand(BaseEntity entity)
{
UpdateDefaultValues(entity, false);
(...)
}
public static void UpdateDefaultValues(BaseEntity entity, bool affectCreationFields)
{
if (entity.Login == null && AppServer.RunningApplication.CurrentUser == null)
throw new Exception("Something went wrong");
(...)
}
}
那么在我们的逻辑中将会有这样的内容:
public class Service
{
T_DIST_Service record;
(...)
public bool Update(DataAccess.Base.GetLogin login)
{
record.Login = login;
(...)
record.Update();
}
}
这当然涉及到改变应用程序中的许多方法。所以我想知道是否有一种无缝的方法来完成这个使用依赖注入(例如)。
也许你们中的一些人已经走过了这条路,并且有一些见解可以分享。谢谢你的宝贵时间。编辑1:使用。net
在架构级别上,听起来像我,您试图将逻辑放在不属于那里的数据访问层中。数据访问组件应该只是一个反贿赂层,所以任何逻辑都应该在调用层中实现。
但是,如果您现在想要更直接的修复,最建议使用内置线程。CurrentPrincipal Ambient Context.
如果你有特殊的信息,你的用户对象必须携带,你可以使用IPrincipal的自定义实现来创建一个自定义的用户上下文