代码之家  ›  专栏  ›  技术社区  ›  Jeff Mc

使用StructureMap缓存命名实例

  •  0
  • Jeff Mc  · 技术社区  · 17 年前

    ForRequestedType<ISession>()
                .CacheBy(InstanceScope.HttpContext)
                .TheDefault.Is.ConstructedBy(() => ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
    

    这和预期的一样。我可以创建一个命名实例

    InstanceOf<User>().Is.ConstructedBy(() => someAwesomeConstructor()).WithName("CurrentUser");
    

    CreatePluginFamilyExpression<&燃气轮机;表示<&燃气轮机;属性是默认值,它强制我创建一个默认值,这是我不想要的。

    2 回复  |  直到 17 年前
        1
  •  3
  •   Matt Hinze    17 年前

    这是我能快速到达的最接近的地方

    ForRequestedType<IInterface>()
        .AddInstances(x => x
            .OfConcreteType<Implementation>()
            .WithName("foo"))
        .CacheBy(InstanceScope.HttpContext);
    
        2
  •  1
  •   eglasius    17 年前

    ForRequestedType<User>().CacheBy(...
    InstanceOf<User>().Is.ConstructedBy(...
    

    当前无法为特定实例配置缓存。PerRequestUser说,如果您有一个IUser,并且希望用户的缓存与另一个类的缓存不同,也会发生同样的情况。在这种情况下,如果您是通过IUser请求实例,那么相同的缓存将始终适用。

    () => someAwesomeConstructor()
    

    相反,你会打电话:

    () => GetUserCachingInSession()
    

    在该方法中,您可以使用简单的逻辑从会话中检索它,如果它不是,则可以在会话中保存一个新的。