2

我有一个 IIS 托管应用程序,它从查询字符串中获取一个 id 并像这样实例化用户对象。在 AppHost.Configure 我像这样在 IoC 中注册 UserService

container.Register(x => new UserService(x.Resolve<IDataContext>()).GetUser()).ReusedWithin(ReuseScope.Request);

我的 UserService (这不是 ServiceStack 服务,只是一个内部助手)看起来像

    public class UserService
    {
        public UserService(IDataContext dataContext)
        {
            _dataContext = dataContext;
        }

        public User GetUser()
        {
            var uid = HttpContext.Current.Request.QueryString["$id$"];
            //snip
        }
        //snip
    }

我想将其更改为自托管应用程序,因此我无法再访问 HttpContext。我查看了 HttpListenerContext 但是当我的类被注入时似乎没有填充任何内容。

任何人都可以阐明如何将参数从查询字符串传递给这个类吗?

4

1 回答 1

1

您无法访问构造函数中的任何依赖项,并且每个 ServiceStack 操作都需要请求 DTO,请参阅New API wiki了解更多详细信息。

在您的服务操作中,您可以在需要时简单地访问它们base.Requestbase.Response例如:

public class MyService : Service
{
    public UserService UserService { get; set; }

    public User Get(MyRequest request)
    {
        var user = UserService.GetUser(base.Request);
        //snip
    }
    //snip
}

注意:自托管的 HttpListenerContext 没有单例,因此您无法从 IOC lambda 内部访问运行时 HTTP 请求。

于 2013-04-10T13:07:42.593 回答