标签: ninject-2

Ninject 2.0:根据实现传递不同的参数

我刚刚开始使用Ninject 2.0和ASP.NET MVC 2.因此,我有一个接口IMongoRepository和类MongoRepository.

MongoRepository接收参数字符串集合.

根据我想要使用的集合,我在MongoRepository的参数中传入一个不同的值.我希望我正确地说这个,但是我如何根据我使用的控制器映射不同的参数?

例如,在Article控制器中我会调用:

_articlesRepository = new MongoRepository("Articles");
Run Code Online (Sandbox Code Playgroud)

在PageController中我会调用:

_pagesController = new MongoRepository("Pages");
Run Code Online (Sandbox Code Playgroud)

我想做的只是做构造函数注入,然后传入IMongoRepository.任何想法或建议?

顺便说一句,我只是在学习IOC/DI; 所以,我愿意接受IOC忍者的任何提示!谢谢!

dependency-injection ninject constructor-injection ninject-2 asp.net-mvc-2

3
推荐指数
1
解决办法
538
查看次数

Ninject 2:是否有相当于1.5的InjectPropertiesWhere?

我在我的MVC项目中使用Ninject 1.5.它运行良好,但由于我们有Ninject 2,我可以升级(并且另外使用每个请求行为,这在1.5中无法正常工作).Ninject 1.5具有InjectPropertiesWhere功能,在Ninject 2中缺失(至少在我前一段时间测试它时).有类似的东西吗?

示例InjectPropertiesWhere:

return Bind<IUserService>().To<UserService>()
    .InjectPropertiesWhere(p => p.Name.EndsWith("Repository"))
    .InjectPropertiesWhere(p => p.Name.EndsWith("Service"))
    .InjectPropertiesWhere(p => p.Name == "ApplicationCache")
    .InjectPropertiesWhere(p => p.Name == "CurrentPrincipal")
    .InjectPropertiesWhere(p => p.Name == "CTEmailSender")
    .InjectPropertiesWhere(p => p.Name == "CTSettings");
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection ninject ninject-2

3
推荐指数
1
解决办法
241
查看次数

Ninject 2.2多重绑定

我最近更新了ASP.NET MVC 3应用程序到Ninject 2.2.

以前我在主应用程序中有以下接口实现绑定:

Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope();
Run Code Online (Sandbox Code Playgroud)

另外,我在主应用程序加载的另一个程序集中有以下内容:

var arg = new ConstructorArgument("info", "something");
Bind<IMyInterface<MyClass>>().To<MyImplementation<BlogComment>>().WithParameter(arg);
Run Code Online (Sandbox Code Playgroud)

这在以前工作得很好,并且正在认识到更具体的实现(带有参数的实现).但是,当我升级到Ninject 2.2时,我收到以下错误:

Error activating IMyInterface{MyClass}
More than one matching bindings are available.
Activation path:
 2) Injection of dependency IMyInterface{MyClass} into parameter myParam of constructor of type SomeOtherClass
 1) Request for IMyInterface

Suggestions:
 1) Ensure that you have defined a binding for IMyInterface{MyClass} only once.
Run Code Online (Sandbox Code Playgroud)

从2.0到2.2的变化导致了这种变化,是否有解决方法?

asp.net-mvc ninject-2

3
推荐指数
1
解决办法
1074
查看次数

"注入"属性不适用于字段

Inject属性不适用于字段.

[Inject]
public MyContext context; //Not injected

[Inject]
public MyContext context {get; set;} //Injected
Run Code Online (Sandbox Code Playgroud)

我正在使用默认的Ninject设置.为什么不注入田地?

.net c# ioc-container ninject-2

3
推荐指数
1
解决办法
1088
查看次数

c#TDD第一次在ServiceBase中

我正在尝试第一次实现测试驱动的开发.我的项目是dotnet 3.5中的ac#.我已阅读在C#书中专业测试驱动开发,现在我想测试我的项目包含Windows service.I've读到最好的做法是,所有代码必须在test.The以下是我的窗口服务实现方法onStart和onStop

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using log4net;

namespace MyUcmaService
{
 public partial class MyUcmaService : ServiceBase
 {
    private Worker _workerObject;
    private static MyUcmaService aMyUcmaService;
    private Thread _workerThread;
    private static ILog _log = LogManager.GetLogger(typeof(MyUcmaService));

    public MyUcmaService()
    {
        InitializeComponent();
        aMyUcmaService = this;
    }

    protected override void OnStart(string[] args)
    {
        // TODO: inserire qui il codice necessario per avviare il servizio.
        //Debugger.Launch();
        AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException;
        try
        {
            _workerObject = new Worker(); …
Run Code Online (Sandbox Code Playgroud)

tdd nunit ninject moq ninject-2

3
推荐指数
2
解决办法
1540
查看次数

将依赖项注入基类

我开始使用依赖注入,并且在向基类注入依赖项时遇到了一些麻烦.

我有一个BaseController控制器,我的其他控制器继承.在这个基本控制器内部,我做了一些检查,例如确定用户是否具有查看当前页面的正确权限,检查是否存在某些会话变量等.

我在这个基本控制器内部有一个依赖项,我想使用Ninject注入,但是当我设置它时,就像我对其他依赖项一样,我告诉编译器:

错误1'MyProject.Controllers.BaseController'不包含带0参数的构造函数

这是有道理的,但我只是不确定如何注入这种依赖.我是否应该使用这种使用基本控制器的模式,还是应该以更有效/更正确的方式进行此操作?

dependency-injection ninject ninject-2 asp.net-mvc-2

2
推荐指数
1
解决办法
1731
查看次数

如何在WCF中使用Ninject2?

在IoC和DI .NET库的简短视图中,我选择使用Ninject2.根据DDD风格:

  • 基础设施:我有Entity Framework 4.0 .edmx模型和Repository实现
  • 域层:我有POCO对象和存储库接口(在基础结构中实现)
  • 应用程序服务:我有WCF服务,它调用来自域层的存储库接口中定义的方法.

我的问题是如何使用Ninject2在WCF中注入存储库.我已经阅读了一些使用Ninject2的文章,但是提供了非常简单的示例(例如:在同一个类库中的依赖注入).任何迹象都很有用:).

非常感谢!

wcf dependency-injection ioc-container ninject-2

2
推荐指数
1
解决办法
1105
查看次数

NInject和MVC 3 - 我应该使用DependencyResolver而不是[Inject]属性吗?

最近我转到MVC 3和Ninject 2.在大多数代码中,我使用构造函数注入,但是有一些地方,我必须使用Inject属性.Ninject 2注册自己的IDepencyResolver接口.我不喜欢DependencyResolver类是System.Web.Mvc命名空间的一部分,因为它的功能与MVC并没有真正的严格关系,但现在,当它存在时,我可以做

public SomeClass 
{
    public IUserService UserService { get; set; }

    public SomeClass()
    {
        UserService = DependencyResolver.Current.GetService<IUserService>();
Run Code Online (Sandbox Code Playgroud)

代替

public SomeClass 
{
    [Inject]
    public IUserService UserService { get; set; }
Run Code Online (Sandbox Code Playgroud)

所以我不必Ninject在我的类中引用命名空间.应该DependencyResolver这样使用?

asp.net-mvc dependency-injection ninject ninject-2 ninject.web.mvc

2
推荐指数
1
解决办法
2065
查看次数

Ninject:每个类实例被拦截一个拦截器实例?

我目前遇到了一个问题,试图在每个被拦截的类实例中连接一个拦截器实例.

我正在InterceptorRegistrationStrategy中创建和建议并设置回调来解析内核中的拦截器(它有一个注入构造函数).请注意,我只能在回调中实例化拦截器,因为InterceptorRegistrationStrategy没有引用内核本身.

            IAdvice advice = this.AdviceFactory.Create(methodInfo);
            advice.Callback = ((context) => context.Kernel.Get<MyInterceptor>());
            this.AdviceRegistry.Register(advice);
Run Code Online (Sandbox Code Playgroud)

我正在获得每个方法的拦截器实例.

是否有任何方法可以为每个被拦截的类型实例创建一个拦截器实例?

我在考虑命名范围,但截获的类型和拦截器不会互相引用.

ninject ioc-container interceptor ninject-2 ninject-extensions

2
推荐指数
1
解决办法
1137
查看次数

在Ninject中跳过处理停用处理

我刚刚开始在一个(大型)项目中使用Ninject,并且只是使用DI来启动它的一部分.我有一个使用构造函数注入广泛组织的子系统.使用Ninject注入这个子系统中的类之间的所有依赖关系是很好的.但是,我依赖于子系统之外的东西,我真的想使用Ninject自动注入,但不要负责它们的生命周期.

我认为Bind<T>.ToConstant(...)这对我想做的事情有用.例如,我可能有一个类型的Monkey类作为Singleton,但我的应用程序的另一部分是在没有Ninject的情况下处理它的生命周期(例如,创建它并手动处理它).当我的Ninject配备子系统被创建时,我实例化一个内核,绑定我的子系统类,然后使用类似Bind<Monkey>.ToConstant(Monkey.Instance)绑定到各种"外部"依赖项的东西.这在激活时工作得很好但在我处理内核时不能按需工作.我的子系统可以比这些外部依赖项具有更短的生命周期,但是当我在内核上调用Dispose时,所有这些依赖项都会被释放,这不是我想要的.虽然我可以通过两种方式看到参数,但是Ninject会自动处理它没有创建的对象似乎有点可疑.我希望至少有一种方法可以选择退出这种行为,但到目前为止我还没有发现任何东西.这有什么支持吗?

c# ninject ninject-2

2
推荐指数
1
解决办法
522
查看次数