我正在开发一个桌面应用程序,该应用程序生成了用于数据库访问的代码,并使用静态对象进行用户识别。
现在我们需要通过webservice公开一些逻辑,我们正在寻找最少侵入性的形式将用户信息从管道推送到数据库访问类。
我们想到的是将委托传递给看起来像这样的插入/更新方法:
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
答案 0 :(得分:2)
在架构层面上,我觉得您试图将逻辑放在不属于那里的数据访问层中。数据访问组件应该只是anti-corruption layer,因此理想情况下应该在调用层中实现任何逻辑。
但是,如果您想在此处立即修复,最好使用内置的Thread.CurrentPrincipal环境上下文。
如果您有关于用户对象必须随身携带的特殊信息,则可以使用IPrincipal的自定义实现来创建自定义User Context。