当前位置: 首页 > 编程语言 > C#

我可以使用Ninject实例化任何依赖的单例服务吗?分享

时间:2023-04-10 23:14:26 C#

我可以使用Ninject实例化任何依赖的单例服务吗?我的asp.netmvc应用程序中有一些服务可以侦听AMQP消息和调用方法。没有控制器依赖于此,因此它不会实例化自身。我可以手动实例化它,显式地为其提供kernel.Get依赖项,但我觉得我不应该这样做。我能否急切地让Ninject在单例范围内实例化类,即使没有其他依赖它?你不能让ninject实例化事物,以防你不要求它实例化自己。简单的方法是让ninject在复合根实例化事物:varkernel=newStandardKernel();kernel.Bind().To();kernel.Load(AppDomain.CurrentDomain.GetAssemblies());//加载assemblby中的所有模块//...//解析根完全配置kernel.Resolve();内核.Resolve();实际上,有一个不同但可以用来达到类似效果的替代方法。它需要尽快实例化至少一项其他服务:Ninject.Extensions.DependencyCreation。它是这样工作的:kernel.Bind().ToConstant("hello");kernel.Bind().To().InSingletonScope();kernel.DefineDependency();内核.Get();//第一次请求字符串时//ISingletonDependency将被实例化。//当然你可以使用任何其他类型而不是字符串为什么Ninject不像其他一些容器(例如Autofac)那样不是分阶段“构建”的。没有先创建绑定然后创建内核来使用它们的概念。以下是完全合法的:kernel.Bind()...kernel.Get()...kernel.Bind()...kernel.Get()...所以ninject不可能知道你什么时候想实例化单例。使用autofac,简单明了:以上是C#学习教程:CanIuseNinjecttoinstantiateanydependentsingletonservices?所有分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varcontainerBuilder=newContainerBuilder();containerBuilder.RegisterType().AutoActivate();varcontainer=containerBuilder.Build();//现本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: