【问题标题】:Session scoped instances in TinyIoCTinyIoC 中的会话范围实例
【发布时间】:2025-12-22 12:30:16
【问题描述】:

我需要一个类的实例,每个用户会话只创建一次。如何在 TinyIoC 注册这样的课程?我正在使用 NancyFx。

【问题讨论】:

  • 你说的是每个网络请求吗?
  • 否,每个用户会话。这意味着只要用户的 Session 对象保持活动状态,它就应该是用户发出的所有请求的同一个实例。实现起来并不难,但我认为它已经由其他人完成了。
  • 不,谢谢指点!它不能满足我的需要,但我可以将它用于我自己的实现。
  • 如果你可以在会话启动方法中获取你的静态容器,你可以在那里进行每个会话注册

标签: ioc-container nancy tinyioc


【解决方案1】:

我最终编写了以下代码:

public static class ContainerExtensions {
    public static TinyIoCContainer.RegisterOptions SessionScoped<TRegisterType>(this TinyIoCContainer container, NancyContext context, Func<TRegisterType> factory) where TRegisterType : class
    {
        return container.Register<TRegisterType>((ctx, overloads) =>
        {
            var key = typeof(TRegisterType).FullName;
            var instance = context.Request.Session[key] as TRegisterType;
            if (instance == null) {
                instance = factory();
                context.Request.Session[key] = instance;
            }
            return instance;
        });
    }
}

我使用了Nancy.Session.InProc NuGet。

【讨论】: