【问题标题】:Passing user information down to data access将用户信息传递给数据访问
【发布时间】:2011-10-24 08:45:13
【问题描述】:

我正在开发一个桌面应用程序,它生成了用于数据库访问的代码并使用静态对象来识别用户。

现在我们需要通过 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

【问题讨论】:

  • 我的错,平台是 .NET

标签: dependency-injection data-access


【解决方案1】:

在架构级别上,听起来您正试图将逻辑放在不属于那里的数据访问层中。数据访问组件应该只是一个anti-corruption layer,因此理想情况下任何逻辑都应该在调用层中实现。

但是,如果您现在想要更直接的修复,最好使用内置的Thread.CurrentPrincipal Ambient Context。

如果您有用户对象必须携带的特殊信息,您可以使用IPrincipal 的自定义实现来创建自定义User Context

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多