Ninject 中的 MEF CreationPolicy.NonShared 是什么?
What is the equivalent of MEFs CreationPolicy.NonShared in Ninject
我知道 CreationPolicy.Shared 表示 单例 ,如 this SO 问题中所述。
那么 NonShared 呢?
我应该有这样的东西吗?
Bind<IDataRepositoryFactory>().To<DataRepositoryFactory>().InTransientScope();
或者我应该像
那样不带任何范围
Bind<IDataRepositoryFactory>().To<DataRepositoryFactory>();
以上两者有什么区别?
Ninject 中的默认范围是 Transient,这实际上意味着每次请求时都会创建一个新实例,因此您的两个示例之间没有区别。
- Transient - 每次请求时都会创建该类型的一个新实例。如果指定 none,则这是默认范围。
- Singleton - 只会创建该类型的单个实例,并且会为每个后续请求返回相同的实例。
- Thread - 每个线程将创建一个该类型的实例。
- Request - 将为每个 Web 请求创建该类型的一个实例。在使用它之前,请参阅 Ninject.Web.Common InRequestScope 文章以获取更多信息。
- 已命名、呼叫、父级 - 由分机提供。在使用它之前,请参阅 Ninject.Extensions.NamedScope 扩展以获取更多信息。
- 自定义 - 您还可以使用 .InScope(Func selectScope) 方法轻松定义自己的范围。
我知道 CreationPolicy.Shared 表示 单例 ,如 this SO 问题中所述。
那么 NonShared 呢?
我应该有这样的东西吗?
Bind<IDataRepositoryFactory>().To<DataRepositoryFactory>().InTransientScope();
或者我应该像
那样不带任何范围Bind<IDataRepositoryFactory>().To<DataRepositoryFactory>();
以上两者有什么区别?
Ninject 中的默认范围是 Transient,这实际上意味着每次请求时都会创建一个新实例,因此您的两个示例之间没有区别。
- Transient - 每次请求时都会创建该类型的一个新实例。如果指定 none,则这是默认范围。
- Singleton - 只会创建该类型的单个实例,并且会为每个后续请求返回相同的实例。
- Thread - 每个线程将创建一个该类型的实例。
- Request - 将为每个 Web 请求创建该类型的一个实例。在使用它之前,请参阅 Ninject.Web.Common InRequestScope 文章以获取更多信息。
- 已命名、呼叫、父级 - 由分机提供。在使用它之前,请参阅 Ninject.Extensions.NamedScope 扩展以获取更多信息。
- 自定义 - 您还可以使用 .InScope(Func selectScope) 方法轻松定义自己的范围。