gpt4 book ai didi

c# - ObjectDataSource 使用带有构造函数的服务类

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:54 26 4
gpt4 key购买 nike

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

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

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

但是,我的服务在没有参数的情况下工作正常。自从我添加它后,我遇到了:

No parameterless constructor defined for this object.

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

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

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

}

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

最佳答案

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

public class ReportDataService<T, U> 

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

 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;
}

关于c# - ObjectDataSource 使用带有构造函数的服务类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17758449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com