ServiceStack 自动配置
ServiceStack automatic dispose
我是 ServiceStack 的新手,我正在尝试使用它。我有一个问题要解决:从我读到的文档中,“ServiceStack 仅在 ServiceStack 请求中解决的依赖项上调用 Dispose(),即它跟踪从 Funq 解决的任何一次性用品并在 ServiceStack 结束时处理它们请求。”。这是什么意思?您可以在下面看到我的示例代码:在这种情况下,我试图在基础 class 中使用惰性 属性 处理 JsonServiceClient,但未调用 Dispose()
。你能给我解释一下它是如何工作的吗?
class Program
{
static void Main(string[] args)
{
new AppHost().Init();
var test = HostContext.AppHost.Container.TryResolve<Worker>();
test.DoWork();
}
}
public abstract class BaseWorker : IDisposable
{
private JsonServiceClient client;
public JsonServiceClient Client => client ?? (client = new JsonServiceClient());
public virtual void Dispose()
{
client?.Dispose();
}
}
public class Worker : BaseWorker
{
public void DoWork()
{
var res = Client.ToPostUrl();
}
}
public class AppHost : AppHostBase
{
public AppHost() : base("Services", typeof(AppHost).Assembly)
{ }
public override void Configure(Container container)
{
container.Register<Worker>(c => new Worker()).ReusedWithin(ReuseScope.Request);
}
}
public class StoreGist : IReturn<StoreGistResponse> { }
public class StoreGistResponse
{
public string Date { get; set; }
}
提前致谢。
首先你不需要处理 JsonServiceClient
因为它不保留任何资源而且它的 Dispose() 是一个 NOOP。
我也会 recommend against using Request Scoped dependencies,基本上,如果您的依赖项仅使用 ThreadSafe 依赖项,请将其注册为单例(默认):
container.AddSingleton(c => new Worker()); //Equivalent to:
container.Register(c => new Worker());
否则将其注册为瞬态依赖,例如:
container.AddTransient(c => new Worker()); //Equivalent to:
container.Register(c => new Worker()).ReusedWithin(ReuseScope.None);
"ServiceStack only calls Dispose() on dependencies resolved within ServiceStack Requests, i.e. it tracks any disposables resolved from Funq and disposes of them at the end of a ServiceStack request.". What does it mean?
这只是意味着 ServiceStack 是否正在解析并注入您的依赖项,例如在你的 ServiceStack 服务中,然后 ServiceStack 也会处理它们。但是,如果您自己从 IOC 解决依赖关系,则需要显式处理它们,通常使用 using
,例如:
using var test = HostContext.AppHost.Container.TryResolve<Worker>();
test.DoWork();
我是 ServiceStack 的新手,我正在尝试使用它。我有一个问题要解决:从我读到的文档中,“ServiceStack 仅在 ServiceStack 请求中解决的依赖项上调用 Dispose(),即它跟踪从 Funq 解决的任何一次性用品并在 ServiceStack 结束时处理它们请求。”。这是什么意思?您可以在下面看到我的示例代码:在这种情况下,我试图在基础 class 中使用惰性 属性 处理 JsonServiceClient,但未调用 Dispose()
。你能给我解释一下它是如何工作的吗?
class Program
{
static void Main(string[] args)
{
new AppHost().Init();
var test = HostContext.AppHost.Container.TryResolve<Worker>();
test.DoWork();
}
}
public abstract class BaseWorker : IDisposable
{
private JsonServiceClient client;
public JsonServiceClient Client => client ?? (client = new JsonServiceClient());
public virtual void Dispose()
{
client?.Dispose();
}
}
public class Worker : BaseWorker
{
public void DoWork()
{
var res = Client.ToPostUrl();
}
}
public class AppHost : AppHostBase
{
public AppHost() : base("Services", typeof(AppHost).Assembly)
{ }
public override void Configure(Container container)
{
container.Register<Worker>(c => new Worker()).ReusedWithin(ReuseScope.Request);
}
}
public class StoreGist : IReturn<StoreGistResponse> { }
public class StoreGistResponse
{
public string Date { get; set; }
}
提前致谢。
首先你不需要处理 JsonServiceClient
因为它不保留任何资源而且它的 Dispose() 是一个 NOOP。
我也会 recommend against using Request Scoped dependencies,基本上,如果您的依赖项仅使用 ThreadSafe 依赖项,请将其注册为单例(默认):
container.AddSingleton(c => new Worker()); //Equivalent to:
container.Register(c => new Worker());
否则将其注册为瞬态依赖,例如:
container.AddTransient(c => new Worker()); //Equivalent to:
container.Register(c => new Worker()).ReusedWithin(ReuseScope.None);
"ServiceStack only calls Dispose() on dependencies resolved within ServiceStack Requests, i.e. it tracks any disposables resolved from Funq and disposes of them at the end of a ServiceStack request.". What does it mean?
这只是意味着 ServiceStack 是否正在解析并注入您的依赖项,例如在你的 ServiceStack 服务中,然后 ServiceStack 也会处理它们。但是,如果您自己从 IOC 解决依赖关系,则需要显式处理它们,通常使用 using
,例如:
using var test = HostContext.AppHost.Container.TryResolve<Worker>();
test.DoWork();