我的控制器现在使用Unity框架实现接口并注入存储库实现。我的问题是,这些注入的实现是单例吗?这是否意味着我的所有用户(从控制器)访问存储库都使用相同的实例?

有帮助吗?

解决方案 3

取自 MSDN Unity docs ...

它构建的对象的生命周期将对应于您在方法参数中指定的生命周期。如果您没有为生命周期指定值,则会为瞬态生命周期注册该类型,这意味着每次调用Resolve时都会创建一个新实例...

在RegisterType方法的参数中包含ContainerControlledLifetimeManager类的实例,以指示容器注册单例映射。

所以基本上,除非你把它指定为单身,否则注入是暂时的。

其他提示

这取决于您是否携带一些ORM会话以及您的存储库实例。如果您的存储库只是一堆静态方法而不是您不应该关心的,那么您可以将其设为单例。否则,您希望仅在一个Web请求中保留状态,以便其他请求线程不会干扰它。

Unity,与其他IoC框架不同。每个Web请求生命周期管理器没有单例,但您可以轻松实现它,例如: 在Unity中 Singleton Per Call上下文(Web请求)

不,不要使存储库单例,特别是在Web应用程序中。

控制器工厂创建存储库(使用Unity)并将它们注入控制器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top