Tag: ninject

Ninject:实体对象不能被IEntityChangeTracker的多个实例引用

我开始在我的MVC5代码优先应用程序中使用Ninject。 这是我的NinjectWebCommon.cs: private static IKernel CreateKernel() { var kernel = new StandardKernel(); try { kernel.Bind<Func>().ToMethod(ctx => () => new Bootstrapper().Kernel); kernel.Bind().To(); kernel.Bind() .ToSelf() //.InSingletonScope(); .InRequestScope(); kernel.Bind() .To(); kernel.Bind() .To(); kernel.Bind() .To(); kernel.Bind() .To(); kernel.Bind() .To(); RegisterServices(kernel); return kernel; } catch { kernel.Dispose(); throw; } } 我试过.InSingletonScope()以及.InRequestScope()但我仍然得到’ 实体对象不能被多个IEntityChangeTracker实例引用 ‘错误。 这是我的界面: public interface IExecutiveRepository : IDisposable { […]

在NInject中实现OnePerSessionBehavior

我想为NInject(v1.0)创建一个OnePerSessionBehavior,我大部分时间都在使用它。 剩下的唯一问题是如何使用.WithArguments()传递新参数,因为每个新会话都要求容器中的内容。 现在我将容器的引用保留为应用程序变量,因此模块只能加载一次,所以绑定只发生一次。 例如,以下内容返回每个新会话的“Something”的单个实例,但传递给所有会话的构造函数参数是相同的DateTime。 Bind() .To() .Using() .WithArgument(“currentDateTime”, DateTime.Now);

什么是IoC容器中的自我绑定?

我已经看到像Ninject这样的框架以及Stack上的post在使用dependency injection框架时会谈到自我绑定,如下面的代码所示。 Bind().To(); 他们甚至达到了具有特殊语法的程度: Bind().ToSelf(); 为什么要将类型绑定到自身? 我没有看到任何实际的应用程序,它可能有用,并有助于减少代码中的依赖性。 这不仅仅意味着对类型的引用会简单地解决它自己吗?

如何将对象注入Ninject模块

我正在使用Ninject进行DI。 我有Ninject Modules将一些服务绑定到内核并在其他模块中使用绑定对象作为服务。 为了清除这种情况,让我们看一些代码:这是我的安全模块。 它提供名为PermissionManagerContainer的服务。 public class SecurityModule : NinjectModule { public override void Load() { Bind().To().InSingletonScope(); } } 另一方面,我有一个FormServices模块,它应该向注入的PermissionManagerContainer添加一个项目。 我认为代码必须是这样的: public class FormServicesModule : NinjectModule { [Ninject.Inject] private IPermissionManagerContainer permissionManagerContainer { get; set; } public override void Load() { permissionManagerContainer.RegisterManager(formServicesPermissionManager); } } 因此,在名为ManagePermissions.aspx的页面中,我再次注入PermissionManagerContainer并为所有模块的权限管理器创建用户界面。 例如,我需要在FormServices模块中保护Forms,并为该服务中的每个表单定义权限。 但我认为在将其注入另一个模块之前,无法保证绑定PermissionManagerContainer ! 实际上,我有自己的解决方案来解决这个问题。 我可以编写一个名为MyModule的抽象类,它是NinjectModule的子类,并编写一个名为InitializeModule的抽象方法。 并在该方法中调用RegisterManager 。 然后在加载内核中的所有模块后,为每个加载的模块调用InitializeModule。 但我的问题是: Ninject内部是否具有此function? Ninject很可能在内部管理这个案例,我可以在load方法中调用RegisterManager […]

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

我的asp.net mvc应用程序中有一些服务可以监听AMQP消息并调用方法。 没有控制器依赖于此,因此它不会自行实例化。 我可以手动实例化它,明确地提供它与kernel.Get依赖关系,但感觉我不应该这样做。 即使没有别的东西依赖它,我能否热切地让Ninject在单例范围内实例化类?

如何将IDictionary属性绑定到Ninject?

我上课了: public class MyClass { [Inject] public IDictionary MyDictionary { get; set; } } 我有几个IMyInterface接口的IMyInterface ,它们注入了自己的依赖项。 每个实现应该有一个不同的密钥。 如何使用Ninject绑定这样的属性?

Ninject和静态类 – 如何?

我有一个静态类,我需要注入一些实例。 静态类可以有静态构造函数,但它必须是无参数的。 那么,我该怎么办呢? 我不想创建一个单身人士。 我希望有一个静态类,其中一个方法对应该注入的实例进行操作。 贝娄是我需要的一个例子。 public static class AuthenticationHelper { // Fields. private static object _lock = new object(); private static readonly UserBusiness _userBusiness; // <– this field needs to be injected. // Public properties. public static User CurrentUser { get { if (IsAuthenticated) { User user = (User)Context.Session[SessionKeys.CURRENT_USER]; if (user == null) { […]

加载EntityFramework 4.3.1时出错

我在C#中创建了一个MVC应用程序。 我在我的解决方案中创建了一个名为PhoneDomain的新项目。 这样做的目的是将我的数据和域层与实际问题分开。 我右键单击该项目并转到“添加库包参考”,我尝试添加EntityFramework包(版本4.3.1)。 它说“ Operation Failed ”“ This package contains an init.ps1 file and needs to be installed from the Package Manager Console ”。 所以我在Visual Studio中打开了Package Manager控制台,并在控制台窗口中输入以下内容: install-package EntityFramework -project PhoneDomain 几秒钟后,它安装了软件包并说Successfully added ‘EntityFramework 4.3.1’ to PhoneDomain 问题是,当我运行我的应用程序时,我收到以下错误消息: Could not load file or assembly ‘EntityFramework, Version=4.3.1.0, Culture=neutral’ or one of its dependencies. The system […]

Ninject 3 InRequestScope不为同一请求返回相同的实例

最近,我将我的一个MVC3项目从Ninject 2升级到Ninject 3。 在几分钟后试图找到为什么InRequestScope不再可用,我发现这现在是Ninject.Web.Common的扩展。 现在,当我尝试运行应用程序时,Ninject的工作方式就像所有与范围InRequest绑定的类型都是InTransientScope; 每次都会创建一个新实例。 在我inheritance自NinjectModule的类中,我有一个简单的绑定: Bind().ToSelf().InRequestScope(); 在我的控制器中,我有2个标有Ninject属性的ViewModel.Activity类型的属性。 [Inject] public ViewModel.Activity Activity { get; set; } [Inject] public ViewModel.Activity Activity1 { get; set; } 如果我在调试模式中查看两个属性的HashCode的值,那么它们都有不同的值,但HttpContext是相同的; 我在同一个请求中。 我错过了如何使用Ninject 3的新版本正确使用新的Ninject.Web.Common.InRequestScope? 非常感谢你。

解决方案 – 实体类型ApplicationUser不是当前上下文的模型的一部分

我将此问题作为文档发布,因为我花了很多时间才找到这个简单的问题。 我正在接受VS15生成的原始MVC项目并尝试修改它。 错误:[InvalidOperationException:实体类型ApplicationUser不是当前上下文模型的一部分。]