【问题标题】:ObjectDataSource using service class with ConstructorObjectDataSource 使用带有构造函数的服务类
【发布时间】:2013-07-20 03:46:57
【问题描述】:

我有一个服务层,它公开了一些方法,这些方法在我的 asp.net 应用程序的 ObjectDataSource 中使用。

服务类的构造函数有一个参数,就是一个int,用来跟踪当前登录的用户:

public ProjectService(int userId)
{
    _userId = userId;
    pb = new ProjectBusiness(_userId);
}

但是,我的服务在没有参数的情况下运行良好。自从我添加它后,我受到了打击:

没有为此对象定义无参数构造函数。

有没有办法将此参数从对象数据源传递到我的服务层?或者也许有更好的方法来处理我的服务(然后是业务和数据层)知道当前存储在 Session[] 中的 UserID?

我发现的一种解决方法是在代码中声明参数:

protected void ChargeRatesODS_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
    var service = new ResourceService(Common.CurrentUserId());
    e.ObjectInstance = service;

}

这是唯一的方法,也是最佳实践,那么我可以坚持下去,但是..这是处理参数的方法吗?我希望构造函数有一个参数,以便它强制开发人员传入一个有效的 UserID,主要是出于日志记录和角色管理的原因。

【问题讨论】:

  • 你有答案。建议您添加您的解决方案作为此问题的答案,并同样标记。

标签: c# asp.net objectdatasource


【解决方案1】:

我在这里发布我的解决方案,因为它最初出现在我的搜索中。 我们的项目使用了通用服务类,根据请求的数据采用不同的类型,并且具有类似的签名,

public class ReportDataService<T, U> 

并且构造函数有一个会话 ID,因此我们可以为每个会话保留一些总数,如下所示。

 public ReportDataService(string sessionGuid)

所以它在页面中工作的唯一方法是使用类型激活器,因此它同时满足不同的泛型类型和不同的构造函数参数(下面的代码在 .aspx.cs 中)。

  void DataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
    {

        var myType = ((ObjectDataSourceView)sender).TypeName;
        var newObj = Activator.CreateInstance(  Type.GetType( myType, false), new object[] { sessionId });
        e.ObjectInstance = newObj;
    }

【讨论】:

    【解决方案2】:

    @civilator 感谢您的回复,我认为它对我也有帮助。这是我的版本,翻译成VB。使用它,以便我可以将参数传递给正在创建的对象的构造函数。

    Protected Sub StaffDataSource_OnObjectCreating(sender As Object, e As ObjectDataSourceEventArgs)
        Dim newObj = New StaffService(Master.clsCU.UserId)
        e.ObjectInstance = newObj
    End Sub
    

    【讨论】:

    • 您的回答与此问题无关。这是另一个答案的副本,但是在 OP 要求 C# 解决方案时用不同的语言编写。有相同或相似问题的人可能会对您的回答感到困惑。如果您想在本网站上投稿,请阅读how to answer 指南。
    • 我正在做一个项目,在 VB 中他的 C# 代码帮助了我,但我不得不将它翻译成 VB。有时 C# 结果显示为 VB 查询,有时 VB 显示为 C#。我只是想帮助那些发现这个线程但并不特别需要 C# 的人。
    猜你喜欢
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多