Tag: ninject

与ninject的循环依赖

我试图弄清楚如何用ninject绑定这样的东西的正确方法。 interface IMainService { void DoStuff(); } interface IOtherService { void DoSomeMagic(); } abstract class BaseClass { //many stuff here } class MainClass : BaseClass, IMainService { public MainClass(IOtherService s) { } public void DoStuff() { throw new NotImplementedException(); } //do many other things } class OtherClass : IOtherService { public OtherClass(IMainService s) { } […]

在Ninject 3.0中使用默认参数值

我有一个类,其构造函数具有一个默认值的参数。 使用Ninject 2.2,它将遵循[Optional]属性并且正常工作,没有针对如此声明的构造函数定义绑定 : public EmployeeValidator([Optional] IValidator personNameValidator = null) 从升级到Ninject 3.0后,此对象的构造失败,并显示一条消息,指出提供程序返回null: 测试方法ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest引发exception: Ninject.ActivationException:使用IValidator {PersonName}的条件隐式自绑定激活IValidator {PersonName}时出错 Provider返回null。 激活路径: 2)将依赖IValidator {PersonName}注入到EmployeeValidator类型的构造函数的参数personNameValidator中 1)IValidator {Employee}的请求 建议: 1)确保提供程序正确处理创建请求。 当参数的默认值存在时, [Optional]属性是否仍然符合,并且使用可选参数处理注入的最佳方法是什么?

具有多个参数的“绑定”的Ninject语法

我如何在Ninject语法中使用多个参数,如下所示? Bind() .To() .WithConstructorArgument(“connectionString”, ConfigurationManager.ConnectionStrings[“MyDb”].ConnectionString ); 如果需要传递多个参数怎么办?

DI / IoC容器性能基准比较?

我在这里找到了一些用于测试几个顶级.NET DI / IoC容器性能的2008年基准测试结果。 但我无法找到任何更新的结果。 是否有任何基准测试可以比较一些大的IoC容器(StructureMap,Unity,Ninject,Autofac,Castle Windsor等)?

异步任务中的HttpContext.Current null

我有一个使用存储库( userRepo )的方法: public override Task CreateLocalUserAsync(IUser user, string password, CancellationToken cancellationToken) { var task = new Task(() => { TUserEntity newUser = new TUserEntity { Id = user.Id, UserName = user.UserName, Password = password }; userRepo.Save(newUser).Flush(); return new IdentityResult(true); }, cancellationToken); task.Start(); return task; } userRepo对象具有使用HttpContext.Current的依赖项。 使用ninject InRequestScope解决了这两个问题。 在Mvc 5中的默认AccountController中调用上面的方法: var result = await […]

Ninject传递构造函数值

使用Ninject,您如何配置内核,以便我可以定义哪些构造函数值传递到对象的实例化? 我在模块中配置了以下内容: Bind() .To() .InSingletonScope() .Named(“LIVE”); Bind() .To() .InSingletonScope() .Named(“LIVE”) .WithConstructorArgument( “service1”, Kernel.Get(“LIVE”)); Service2Impl接受IService1的构造函数参数,但我希望它来自容器。 我也想要命名绑定,因为我的代码将在运行时针对不同的版本。 这似乎有效,但它是实现我想做的正确方法吗? 我是否应该在不使用命名绑定的情况下实现并将不同的配置模块连接到内核中? 编辑 我现在使用ToMethod()方法指定一个委托,以根据特定类型的请求进行调用。 这看起来好一点,因为如果构造函数配置错误,我将得到编译时警告,而不是必须知道我首先传递的参数的名称。 谢谢

用简单的注射器替换Ninject

我已经将Ninject用于我的应用程序。 Ninject非常简单易学,但速度很慢,我尝试使用另一个IoC来比较它是否比Ninject更快。 MVC3和Simple Injector有很多IoC容器看起来对我很好,但是我在使用Simple Injector重新替换Ninject时遇到了很多问题。 特别是使用AutoMapper 。 我尝试将这些行转换为Simple Injector代码。 Bind().To(); foreach (var mapper in MapperRegistry.AllMappers()) { Bind().ToConstant(mapper); } Bind().ToSelf().InSingletonScope() .WithConstructorArgument(“mappers”, ctx => ctx.Kernel.GetAll()); Bind() .ToMethod(ctx => ctx.Kernel.Get()); Bind().ToMethod(ctx => ctx.Kernel.Get()); Bind().To() 你能帮帮我吗? 我已经阅读了文档和Google搜索,但到目前为止还没有解决方案。

如何使用带有DependencyResolver和PropertyInjection的Ninject命名绑定

我意识到构造函数注入是首选,但我很好奇如何在使用另一种注入forms时使用Ninject的上下文“命名绑定”。 具体来说,在使用DependencyResolver或属性注入时,如何执行以下操作。 public MyService([Named(“Alpha”)] IRepository repository) { this.repository = repository; }

使用Ninject(或其他一些容器)如何找出请求服务的类型?

假设我有一个服务接口: public interface IFooService { void DoSomething(); } 并且该服务的具体实现是通用的: public class FooService : IFooService { public virtual void DoSomething() { } } 我还有一些需要IFooService实例的其他类: public class Bar { private IFooService _fooService; public Bar(IFooService fooService) { this._fooService = fooService; } } 我需要连接我的IoC容器,这样当创建Bar时,它会传递一个FooService 的构造函数参数。 还有很多其他课程就像Bar一样。 每个人都可能需要传递给他们的FooService 实例,其中TRequestingClass是需要IFooService实例的类的类型。 我不需要向IFooService的消费者公开这个怪癖。 他们应该关心的是他们可以调用他们传递的IFooService的方法。 他们不应该知道他们传递的IFooService的具体实现需要任何特殊的构造。 FooService 的一个可接受的替代方案是一个非generics类,它的构造函数中包含一个字符串参数,该类包含要为其创建的类的名称。 即: public class FooService : IFooService […]

Ninject:将构造函数参数绑定到其他对象的属性

我有一个IConfig对象,其中包含我的应用程序中使用的设置。 此刻,我将整个对象注入到需要它的每个对象的构造函数中,如下所示: public interface IConfig { string Username { get; } string Password { get; } //… other settings } public class Foo : IFoo { private readonly string username; private readonly string password; public Foo(IConfig config) { this.username = config.Username; this.password = config.Password; } } 缺点是IConfig包含大量设置,因为它是从整个配置文件中反序列化的,因此不需要注入整个对象。 我想要做的是将构造函数更改为Foo(string username, string password)以便它只接收所需的设置。 这也使得为测试创建Foo对象变得更加容易(不必仅仅为了创建Foo而设置IConfig )。 我想直接在我的NinjectModule绑定构造函数参数,如下所示: public […]