Tag: ninject

MVC请求的Ninject Contextual绑定

我有一个不寻常的情况将服务注入ASP.NET MVC控制器。 Controller提供单个动作来在页面上呈现侧栏菜单,注入Controller的服务是创建侧栏内容的工厂。 该动作使用[ChildActionOnly]属性进行修饰:侧栏只能在渲染另一个动作时渲染。 困难在于我想根据请求的页面(= Controller)注入侧栏工厂抽象的不同实例。 以前,我使用的是一种抽象工厂,它使用控制器名称字符串来确定要使用的具体工厂实现的不优雅实现; 我现在把它转移到一个合适的抽象工厂,因此需要在其他地方移动工厂类型的选择。 我的Ninject绑定目前非常简单地定义为: Kernel.Bind().To().InRequestScope(); Kernel.Bind().To().InRequestScope(); 当我添加更多控制器时,我将添加第一行的更多实例。 我希望看到这个工作的方式是: 收到/foo/action请求 Ninject将ISideBarFactory绑定到FooSideBarFactory并注入SideBarController /bar/action请求已收到 Ninject将ISideBarFactory绑定到BarSideBarFactory并注入SideBarController 收到/baz/action要求 No BazSideBarFactory存在,因此Ninject将ISideBarFactory绑定到默认实现DefaultSideBarFactory ,并注入SideBarController 我已经咨询了关于Contextual Binding的Ninject wiki页面,这似乎是我原则上想要的 ,但我没有找到任何记录在那里显然达到我的目标。

Ninject垃圾收集

我在一个由服务,存储库组成的n层应用程序中使用Ninject,所有这些都与UnitOfWork模式和Ninject相连。 此外,我在引用这些服务和存储库的单独线程中执行不同的作业。 每隔一段时间,似乎在随机的时间,我得到一个exception,它崩溃我的控制台应用程序执行作业。 例外是: Application: Playground.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.NullReferenceException Stack: at Ninject.Activation.Caching.GarbageCollectionCachePruner.PruneCacheIfGarbageCollectorHasRun(System.Object) at System.Threading.ExecutionContext.runTryCode(System.Object) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading._TimerCallback.PerformTimerCallback(System.Object) 据我所知,这与Ninject中新的Cache-and-Collection管理有关。 但是,我没有为任何Ninject绑定指定任何范围。 编辑:代码示例: 以下是一些使用的代码(我相信关键部分): public class DefaultUnitOfWork : Provider, IUnitOfWork, IServiceUnitOfWork where TObjectContext : ObjectContext, new() { […]

Ninject:使用NSubstitute进行自动模拟?

任何人都可以提供帮助,我在使用Ninject和NSubstitute之间可用的自动模拟时遇到问题,实际上这个包是一个名为Ninject.MockingKernel.NSubstitute的ninject包,它应该允许我使用Ninject创建Ninject.MockingKernel.NSubstitute并返回实例注入Ninject.MockingKernel.NSubstitute 。 Moq和Rhinomocks似乎有一些例子,但我没有看到NSubstitute。 到目前为止我所拥有的是什么 this.kernel = new NSubstituteMockingKernel(); var summaryService = this.kernel.GetMock(); // GetMock not available 有人用吗?

存储库上的Ninject WCF垃圾收集

我正在使用带有WCF扩展的Ninject 2.2。 在我的大多数服务中,存储库都会快速实例化/释放。 但是,我的一项服务执行长时间运行(2-3分钟)。 如果我观察w3wp进程,我可以看到使用SQL建立的TCP / IP连接,我可以在SQL上运行sp_who2并查看连接。 完成这些操作后,连接将保持打开状态5-10分钟。 当我多次运行该操作时,我没有看到生成新的连接,但是我将运行该应用程序的多个实例,并且我发现之前的性能下降,同时发送了那些长时间运行的操作,并且在几分钟后自行修复。 这个垃圾收集可以成为问题的一部分吗?如何解决? 这是我的Ninject绑定: Bind().To().InRequestScope(); 这是我的WCF绑定: 我意识到一个选择是将服务使用的存储库数量减少到一个,但我真的在寻找一个临时解决方案。

Ninject – 静态类中的内核?

是否正确使用所需的NinjectModule在一个单独的共享库中的静态类中“包装”一个StandardKernel并在需要注入时使用相同的库(而不是每次都实例化一个新内核)? 编辑:我正在尝试从我正在开发的WCF服务中使用Ninject。 (如果我刚开始学习DI和IoC容器,我说的话完全不好意思,请耐心等待)

Ninject:将父实例提供给正在解决的子项

我有这个类层次结构: public interface ISR { } public interface ICU { } public interface IFI { } public class CU : ICU { } public class SR : ISR { public SR(IFI fi) { FI = fi; } public IFI FI { get; set; } } public class FI : IFI { public FI(ISR sr, ICU […]

如何告诉Ninject为嵌套构造函数注入相同的实例?

我有一个Windows服务应用程序,我想在我的服务类中使用Ninject。 有一些服务类使用其他服务类,比如说“低级”或更通用的服务类。 每个服务通常都需要一个数据库访问存储库。 例如,我有一个IRepository接口,一个IServices1和一个IServices2接口。 后两者有Services1和Services2实现,两者都有一个IRepository类型的构造函数参数。 现在假设Services1的实现想要使用IServices2接口的一些方法,所以我将另一个构造函数参数添加到Services1,类型为IServices2。 现在,当我手动实例化Services1类时,我会这样做: var repo = new MyRepository(); // implementing IRepository var service1 = new Services1(repo, new Services2(repo)); 这样我就可以确保两个服务都可以使用相同的存储库(这对我来说是一个基本要求)。 如何使用Ninject为此scneario为我准备一个IServices1实例并使用正确的IRepository注入? 或者这种方法有任何重大设计错误吗? 我不是在MVC平台上,所以我没有这里的请求范围,我认为如果它是MVC我会做任务。

System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)

据我所知,这个错误发生在过去,当Ninject是,并且站点包的目标是4.x并且彼此不匹配。 我已经检查了我的机器并且它们匹配 – 两者都是4.0。 我花了一些时间来更新项目中的所有Nu-Get包。 在此之前,没有发生此错误。 如何消除此错误? 这是我的完整错误输出: enter code here ‘/’应用程序中的服务器错误。 找不到方法:’System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)’。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.MissingMethodException:找不到方法:’System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)’。 Source Error: Line 29: DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); Line 30: DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); Line 31: bootstrapper.Initialize(CreateKernel); Line 32: } Line 33: Source File: C:\My Documents\Alcon_DEV\SecurityMasterData\Dev\Alcon.SecurityMasterData.WebUI\App_Start\NinjectWebCommon.cs Line: 31 Stack Trace: [MissingMethodException: Method not found: ‘System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)’.] Ninject.Injection.DynamicMethodInjectorFactory.Create(ConstructorInfo constructor) in c:\Projects\Ninject\ninject\src\Ninject\Injection\DynamicMethodInjectorFactory.cs:48 Ninject.Planning.Strategies.ConstructorReflectionStrategy.Execute(IPlan plan) in […]

Ninject在具有多个程序集的WebApi项目中抛出Activation Exception

我的asp.net WebApi项目包含多个服务,核心和数据访问程序集。 为了在项目中使用Ninject作为我的DI容器,我从NuGet添加了Ninject.Web.Common包。 然后,我实现了IDependencyResolver: public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver { readonly IKernel kernel; public NinjectDependencyResolver(IKernel kernel) : base(kernel) { this.kernel = kernel; } public IDependencyScope BeginScope() { return new NinjectDependencyScope(this.kernel.BeginBlock()); } } public class NinjectDependencyScope : IDependencyScope { IResolutionRoot resolver; public NinjectDependencyScope(IResolutionRoot resolver) { this.resolver = resolver; } public object GetService(System.Type serviceType) { if […]

加载程序集后执行的C#方法

我写了一些C#类库,我想使用Ninject为我的类提供dependency injection。 类库是否有可能声明一些代码(方法),这些代码(方法)将在加载类库时每次执行。 我需要这个来定义Ninject的绑定。