首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack Funq RequestScope

ServiceStack Funq RequestScope
EN

Stack Overflow用户
提问于 2014-02-02 18:07:43
回答 1查看 649关注 0票数 2

如果我用RequestScope.Request注册一个类型,然后在服务中自动注册它,我知道对象的生存期范围将得到尊重。

如果我以非自动连线的方式解析类型,即:

代码语言:javascript
复制
var authRepo = EndpointHost.TryResolve<IAuthenticationRepository>();

我怎样才能证实这一点呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-02 21:35:34

当使用TryResolve而不是autowire时,寿命范围会得到尊重吗?是。

您可以通过设置一个项目来确认这一点,在该项目中,您可以测试依赖关系的生存期。我创建了一个测试项目来演示这一点。

这里有完整的源代码。

我创建了4种依赖关系;2种是自动连接的,由一种在所有请求中持久(静态)的依赖组成,另一种仅适用于请求。其他两个依赖项是用相同的ReuseScope创建的,但它们不是自动创建的,将在使用TryResolve方法时解决。因此:

代码语言:javascript
复制
container.RegisterAutoWiredAs<AutoStatic, IAutoStatic>();
container.RegisterAutoWiredAs<AutoRequest, IAutoRequest>().ReusedWithin(ReuseScope.Request);
container.Register<IResolveStatic>(c => new ResolveStatic());
container.Register<IResolveRequest>(c => new ResolveRequest()).ReusedWithin(ReuseScope.Request);

在创建每个依赖项时,它们的构造函数方法设置在CreatedAt属性上创建的时间。

代码语言:javascript
复制
public class AutoStatic : IAutoStatic
{
    public string CreatedAt { get; set; }
    public AutoStatic() { CreatedAt = DateTime.Now.ToString(); }
}

    ...

静态依赖关系,即ReuseScope.Default,应该始终显示所有请求的第一次请求时间。以ReuseScope.Request为作用域的依赖关系应该总是对每个请求都有一个新的创建时间。

我们将证明这一点的简单服务是:

代码语言:javascript
复制
public class TestController : Service
{
    public IAutoStatic AutoStatic { get; set; }
    public IAutoRequest AutoRequest { get; set; }
    IResolveStatic ResolveStatic { get; set; }
    IResolveRequest ResolveRequest { get; set; }

    public void Get(TestRequest request)
    {
        ResolveStatic = EndpointHost.TryResolve<IResolveStatic>();
        ResolveRequest = EndpointHost.TryResolve<IResolveRequest>();

        Console.WriteLine("-NEW REQUEST-");
        Console.WriteLine("Auto Static {0}", AutoStatic.CreatedAt);
        Console.WriteLine("Resolve Static {0}", ResolveStatic.CreatedAt);
        Console.WriteLine("Auto Request {0}", AutoRequest.CreatedAt);
        Console.WriteLine("Resolve Request {0}", ResolveRequest.CreatedAt);
    }
}

结果:

因此,在三个不同的请求之后,使用autowire和TryResolve方法,我们可以看到静态的工作和请求的作用域是一样的。

所以使用自动导航或TryResolveReuseScope是受人尊敬的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21514212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档