【问题标题】:In ServiceStack what is the proper way to get the container在 ServiceStack 中获取容器的正确方法是什么
【发布时间】:2012-11-01 06:49:35
【问题描述】:

我目前正在尝试在我正在编写的 SignalR 应用程序中使用 ServiceStack,该应用程序是大型 MVC 4.5 应用程序的一部分。

我目前在 App_Start 文件夹中有一个类正在启动我的 Hub。我的问题是如何获得对容器的引用,如 ServiceStack 的 wiki 中所示。

container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("localhost:6379"));
container.Register<ICacheClient>(c => (ICacheClient)c.Resolve<IRedisClientsManager>().GetCacheClient());

我正在做的是使用 Redis 作为开发缓存层,并计划使用我们现有的 membase 作为生产缓存层。

如何获得容器?

【问题讨论】:

    标签: inversion-of-control servicestack


    【解决方案1】:

    要解决来自 ServiceStack 的 IOC 外部 servicestack 的依赖关系,您可以使用以下任一方法:

    var foo = HostContext.TryResolve<IFoo>(); //null if doesn't exist
    var foo = HostContext.Resolve<IFoo>();    //throws if IFoo doesn't exist
    

    有几种方法可以从ServiceStack外部访问Container,最快的方法是:

    var container = HostContext.Container;
    

    通过 AppHost 单例

    这是通过IAppHost单例访问它的简写方式:

    HostContext.AppHost.Container
    

    【讨论】:

    • EndpointHost 现在是 Endpoint。正确的?此外,AppHost 似乎不再位于 Endpoint 下。 AppHostBase.Instance 会返回相同的结果吗?
    • @FredLackey 不,那是针对 v3 的,将其更新为使用 v4。
    • 不确定,但在 3.9.48 版本中,我没有在 HostContext 下获得此选项。但是,我可以使用“AppHostBase.Instance.Container.Resolve( )" 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多