Tag: ninject

Ninject Web Api“确保控制器具有无参数的公共构造函数。”

我已经使用ninject差不多2年但现在使用它我的ASP.NET MVC / WebAPI项目我收到此消息和stackoverflow上的先前线程与各种建议并没有解决我的问题。 我有以下nuget包:Ninject MVC3 Ninject Integration for WebApi 2。 我已经尝试解决问题的时间越来越长,我也会非常感谢我能得到的任何帮助和建议! (如果有人想仔细看看,我很乐意把解决方案放在Github上) 这是我使用的类: public class CmsContext : DbContext { public CmsContext() : base(“CMS_POC”) { } public DbSet Activities { get; set; } public DbSet Systems { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } } public interface IRepository where T : […]

配置Ninject以返回结果列表

我正在使用Ninject解决依赖关系,它一直在游泳,直到现在。 在这个例子中,我实际上需要一个基于存储在App.config中的数据初始化的对象列表。 但是,Ninject不断返回一个空列表。 下面的代码段是我尝试过的一个例子。 我已经为一些上下文包含了类层次结构的构造函数。 public ServiceSchedulerBuilder(IList textExportServices) { _textExportService = textExportServices; } public TextExportService(IHotFolderManager hotFolder) { _hotFolder = hotFolder; } public HotFolderManager(string baseFolderPath, string defaultFileSearchPattern) { //Some IO } //In a Ninject AppModule… Kernel.Bind<IList>().ToMethod(ctx => { var services = new List(); foreach (var device in GetDevicesByEnvironment()) { var service = ctx.Kernel.Get(new ConstructorArgument(“hotFolder”, ctx.Kernel.Get( new […]

在Simple Injector中Ninject WhenInjectedInto等效

映射到常量值。 例如,当您需要解析一个automapper IMapper实例时会发生这种情况,例如Ninject中的示例 var config = new MapperConfiguration( cfg => { cfg.AddProfile( new MyMapperConfiguration() ); } ); Bind().ToConstant( config ).InSingletonScope(); Bind().ToConstant( config.CreateMapper() ); 根据注入类型绑定不同的实现 当一组公共类依赖于公共接口但具体实现应该不同时,就会发生这种情况。 例 public interface ICardService {} public class TypeACardService : ICardService, ITypeACardService { public TypeACardService( ICardValidator validator ) { } } public class TypeBCardService : ICardService, ITypeBCardService { public TypeBCardService( ICardValidator […]

错误500 Web API

过去4个小时我一直试图解决这个问题。 我有一个新的Web API项目 – 在开发上100%正常工作, 但是在实时服务器上我得到500 Internal Server Error 。 当我部署新版本并直接向http://URL/Action发送请求时,我收到错误。 但是,如果我转到http://URL/ first然后将POST请求发送到http://URL/Action ,它可以工作。 如果没有对API提出12,13 hours请求,情况也是如此 因此,首先我必须打开: http://URL/Action ,然后发送POST请求。 所以Project使用Ninject ,这是Startup.cs using System.Collections.Generic; using System.Reflection; using System.Web.Http; using API.MyApi; using Business.Bindings; using Microsoft.Owin; using Ninject; using Ninject.Modules; using Ninject.Web.Common.OwinHost; using Ninject.Web.WebApi.OwinHost; using Owin; [assembly: OwinStartup(typeof(Startup))] namespace API.MyApi { public class Startup { public void Configuration(IAppBuilder […]

如何在ASP.NET应用程序中存储Ninject内核?

我真的很困惑小的,部分的,单文件的例子,其中有一个Ninject内核到处都没有显示如何真正到达应用程序中的内核。 (1)我们应该实例化一个内核并将其保存在“静态”上下文中吗? 或者我们应该在每个请求上实例化一个不同的(*在Application_BeginRequest *中) (2)如果它是“每个请求的内核”,那么为什么在Application_Start上调用NinjectWebCommon.cs的Initialize()方法( 在安装NuGet包时得到 ),因为它调用了bootstrapper.Initialize(CreateKernel) – NinjectWebCommon.cs (3)如果它是“一个全局静态内核”,则“InRequestScope()”不起作用。 它执行以下代码并返回null,因为在ApplicationStart()时没有请求。 kernel.Components.GetAll() .Select(c => c.RequestScope) .FirstOrDefault(s => s != null); (4)同样,如果它是“每个请求的内核”,我们将在哪里保存内核? HttpContext.Current? 那么如果我打算使用HttpContext.Current,那么使用InRequestScope()是什么意思?

如何使用Ninject Conventions Extension进行绑定?

我喜欢使用Ninject自动绑定绑定波纹管代码。 是否可以在单个项目中同时使用手动和自动绑定? 让我们采取波纹管手动绑定,我希望通过自动绑定实现。 请告诉我如何实现这一目标。 kernel.Bind().ToSelf().InRequestScope(); kernel.Bind<IUnitOfWork>().To<UnitOfWork>(); Bellow所有接口都inheritance自基础接口: IRepository 3。 kernel.Bind().To(); 4。 kernel.Bind().To(); 5。 kernel.Bind().To().WithConstructorArgument(“apikey”, AppSettingsManager.GetSmsApiKey) 额外 我是否需要为多个类编写.Exclude()如果我需要这样做的话 .Exclude() .Exclude() .Exclude() ? 并且对于1和2是否需要单独的手动绑定? 或者1可以使用BindToSelf()’ and .Configure(b => b.InRequestScope())`完成?

NInject扩展工厂

在阅读了NInject v3上的新文档以及如何使用Factory Extension之后 ,显然我仍然没有完全得到它,因为我的代码抛出exception到处… 我得到了这个例外,如果人们愿意,我可以粘贴整个东西,但我会尽量保持简短。 激活IDeployEntityContainer时出错没有匹配的绑定可用,并且该类型不可自我绑定。 这是我的代码…… Ninject Bind Module类 class MyNinjectModule : NinjectModule { public override void Load() { … Bind().ToFactory(); Bind().To(); … } } 使用工厂的类 class DeployController : IDeployController { private readonly IDeployEntityFactory _entityFactory; public DeployController(…, IDeployEntityFactory entityFactory) { … } public void Execute() { … //I get the Exception on this line… […]

如何避免由于DI容器绑定要求而使BAL依赖于DAL?

我的申请包括三个项目。 核心,DAL和BAL。 核心包含域对象(客户,订单,产品)。 它还包含基本的IRepository接口IRepository . DAL包含EntityFramework特定的东西。 它还包含Concrete Repositories(CustomerRepository,OrderRepository,ProductRepository)。 我在这里添加了这些具体的存储库,因为它们依赖于DbContext(这是EF特定的) 现在我的BAL应该只依赖于Core而不依赖于DAL。 我在这个项目中添加了对NInject的依赖。 但是,我仍然需要告诉Ninject它应该将IRepository 解析为CustomerRepository,这迫使我在这里添加DAL依赖。 无论如何避免在我的BAL项目中添加对DAL的依赖?

错误激活IInterceptor …只能通过COM?

TL; DR: Kernel.Get在从.net / WPF应用程序调用时起作用,但是当从VB6应用程序调用时,会发生内部ActivationException (在TargetInvocationException内部)。 WTH? 这是对这个问题的一个跟进,我在这个问题中配置了一个具有Ninject约定的抽象工厂,这样我就不需要实际实现一个,Ninject工厂扩展负责生成一个动态。 这很好用……直到我需要从VB6代码运行我的库。 _kernel.Bind(t => t.FromAssemblyContaining(typeof(ViewModelBase)) .SelectAllInterfaces() .EndingWith(“ViewFactory”) .BindToFactory()); 一旦我从VB6代码调用应用程序上的任何内容,如果我将依赖项的解析包装在try / catch块中,我将使用内部ActivationException捕获TargetInvocationException : 使用IInterceptor Provider的条件隐式自绑定激活IInterceptor时出错返回null。 激活路径: 3)将依赖性IInterceptor注入到IViewFactoryProxy类型的构造函数的参数中 2)将依赖IViewFactory注入到MsgBox类型的构造函数的参数viewFactory中 1)请求IMsgBox 建议: 1)确保提供程序正确处理创建请求。 我没有引用Ninject.Interception扩展(此时)。 奇怪的是,如果不是启动VB6,我在调试时启动沙盒WPF测试应用程序,我没有得到任何ActivationException ,一切都像魅力一样。 VB6代码死于automation error -2146232828 (80131604) ,谷歌没有产生任何结果,但我猜它与抛出的TargetInvocationException 。 就.net代码而言, 它只是起作用 :如果我从WPF客户端编写应用程序,我可以在MsgBox类构造函数中查看并看到IViewFactory参数对IViewFactory感到满意; 如果我从VB6 ActiveX DLL编写应用程序(我还创建了一个VB6 EXE进行测试,并且与DLL相同),它会爆炸。 UPDATE 我删除了通用抽象工厂,我不再收到此错误。 因为我不想写工厂,所以我采取了一些更紧密的耦合,我可以忍受。 现在我想知道为什么会这样!

Ninject在Kernel.Get和Constructor Injection之间的不同行为

我有什么: public interface IBla { } public class Bla1 : IBla { } public class Bla : IBla { } public class Consumer { private readonly IBla[] _array; public Consumer(IBla[] array) { _array = array; } } public static class NinjectExtensions { public class BindListExpression { private readonly IKernel _kernel; private readonly List _types = […]