Tag: ninject

如何在不引用程序集(或其中的类型)的情况下使用Ninject Conventions扩展

对于这个长期的问题,提前抱歉,这很长,因为我整天都在挖掘这个问题。 一般问题: 我有一个ASP.Net MVC2应用程序,其中包含以下项目:MyApp.Web,MyApp.Services,MyApp.Data。 我们对接口进行编码并将Ninject 2用于DI / IoC。 但是,我对打字(并忘记输入)感到非常厌倦: Bind.To; 所以,了解Ninject.Extensions.Convensions,我试图用它来自动扫描和注册模块和IXxxx => Xxxx类型的简单依赖项。 我试过的是有效的(但还不够): 我可以使用以下代码来设置Ninject,并且所有内容似乎都按预期连接。 public static IKernel Initialize() { var kernel = new StandardKernel(); kernel.Scan(a => { a.FromAssemblyContaining(); a.FromAssemblyContaining(); a.AutoLoadModules(); a.BindWithDefaultConventions(); a.InTransientScope(); }); return kernel; } 我想要完成的事情: 但是……我想以一种我认为支持的方式更进一步,但我似乎无法让它发挥作用。 由于我们的MyApp.Web项目根本没有使用MyApp.Data(直接),我试图避免引用MyApp.Data。 使用上面的代码,我必须从MyApp.Web引用MyApp.Data,因为对SomeDataClass的编译时引用。 我更愿意为Ninject指定一个程序集的名称进行扫描和注册。 看来,Conventions扩展通过From过载来支持这个,它带有一个字符串(或可枚举的字符串)。 我尝试了什么以及它如何打破: 所以,我在From重载上尝试了几种变体: public static IKernel Initialize() { var kernel = new StandardKernel(); […]

Ninject默认的上下文绑定

我有一个具有几个不同具体实现的接口。 我试图给Ninject一个默认使用,如果名称匹配,只使用其他实现。 例如,我有以下绑定。 Bind().To() Bind().To().Named(“55abd8b8-097f-4e1c-8d32-95cc97910604”); 我想要的是,如果命名部分不匹配,使用DefaultSomething实现。 当我传入明确绑定的guid时,它工作正常。 当我传入任何其他guid时,我得到“没有匹配的绑定可用”exception。 Bind().To().Named(“55abd8b8-097f-4e1c-8d32-95cc97910604”); Bind().To() Bind().To() Bind().To().When(ctx => ctx.Service != null && ctx.Service.Name == “55abd8b8-097f-4e1c-8d32-95cc97910604”); 我也试过使用。当检查绑定时,我试图像下面那样颠倒顺序但是我永远无法绑定,除非我传入明确命名的Guid。 这篇文章似乎表明默认绑定有效,所以我一定做错了。 有什么建议? 编辑:这是一个完整的例子,显示我试图解决的问题。 所需的行为是针对kernel.Get(“Three”).Write()返回”Unknown Number” using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ninject; namespace NinjectTest { interface INumber { string Write(); } class UnknownNumber : INumber { public string Write() { return […]

使用NUnit在不同的appdomain中运行unit testing

我似乎遇到了一个问题,我们正在使用的应用程序使用Ninject内核,并包含一个使用WCF调用内容(username,token …)收集的特定配置。 基于特定配置,用户被分配了应用程序的权限,这通过Ninject内核中的特定实例进行屏蔽。 我们不能只重新组合Ninject内核,我们想要做的是运行几个Nunit测试,但是在一个单独的应用程序域中运行它们(每次使用不同的设置重新创建内核)。 我只找到了在不同应用领域运行整个测试项目的方法,但没有测试每个测试。 有办法解决这个问题吗? 不幸的是,Ninject配置不在我们这边,我们必须以这种方式“生活”。

将DI与构造函数参数结合起来?

如何将构造函数注入与“手动”构造函数参数组合? 即。 public class SomeObject { public SomeObject(IService service, float someValue) { } } 我的DI容器应该解析/注入IService,并且应该指定someValue。 我该如何混合两者?

Web API2 NinjectWebCommon.cs不会出现

我Empty Web API in Visual Studio 2013 Framework 4.5中执行Empty Web API in Visual Studio 2013 。 显然NinjectWebCommon.cs没有出现。 我通过Nuget安装, Ninject, Ninject.Web.Common, Ninject.MVC5, Ninject.Web.Common.WebHost, Ninject.Web.WebApi, Ninject.web.WebApi.WebHost 但是NinjectWebCommon.cs仍然没有出现。 我还需要安装什么? 我可以手动添加该文件吗? 谢谢

MVC 4 Web Api控制器没有默认构造函数?

这是跟踪: An error has occurred. Type ‘ProjectName.Web.Api.Controllers.ContinentsController’ does not have a default constructor System.ArgumentException at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 我觉得这很奇怪,因为public class UsersController : ApiController { … }工作得很好。 我比较了2个控制器,所有设置和结构都相似。 我正在使用Ninject ,我的系统设置类似于Jamie Kurtz Asp.Net Mvc 4和Web Api:从头到尾构建REST服务 。 从堆栈跟踪,是否有人能够发现问题以及如何解决它? 谢谢! 按照要求。 ContinentsController […]

WPF中的Ninject构造函数注入

是否有可能使用ninject进行dependency injection,结果就像我可以在MVC中获得的注入一样。 详细说来,如果我使用MVC ninject适配器,我可以将我的Web控制器声明为具有构造函数参数,然后由ninject自动注入。 但是,我没有为WPF找到这样的ninject扩展,这将使我有一个这样的窗口: public partial class MainWindow : Window { private readonly IService injectedService; public MainWindow(IService injectedService) { this.injectedService = injectedService; } } 我想这样做而不在我的主应用程序启动中明确使用IKernel来获取mainwindow的实例。 我更喜欢使用xaml配置的常规方法来获取主窗口和所有后续窗口的实例。 这可能吗? 有没有办法挂钩xaml生成的对象创建来修改它以使用Ninject进行构造函数dependency injection。

懒惰 Ninject Injection

我使用ninject框架。 在我的代码中,我有一个Lazy对象。 我可以创建一个实例,但是当我调用value属性时,我得到了一个exception。 private Lazy psoriasisReportUserControl; [Inject] public Lazy PsoriasisReportUserControl { get { return psoriasisReportUserControl; } set { psoriasisReportUserControl = value; } } 我有 lazily-initialized类型没有public,无参数构造函数 exception,因为注入不会将方法注入构造函数中。 我想我必须写一个方法来绑定什么创建一个新实例。

在.NET Core中使用Ninject

我试图在2016年5月发布的.NET Core中安装Ninject 3.3.2。我收到一个错误:依赖Ninject 3.2.2不支持框架.NETCoreApp,Version = v1.0。 有没有人有类似的问题,有什么解决方案吗?

Ninject + MVC3没有注入控制器

我已经使用了NuGet Ninject MVC3扩展,并且根据请求无法将其注入控制器。 它似乎没有绑定,因为MVC正在寻找无参数的构造函数。 这是堆栈跟踪: [MissingMethodException: No parameterless constructor defined for this object.] System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241 System.Activator.CreateInstance(Type type, Boolean nonPublic) +69 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67 [InvalidOperationException: An error […]