Ninject依赖注入Decorator模式 [英] Ninject dependency injection with Decorator pattern

查看:189
本文介绍了Ninject依赖注入Decorator模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我说,我有这样的类层次结构:

Say, I have such classes hierarchy:

public interface IRepository { }

public class SomeSimpleRepository : IRepository {}

现在我想装饰SomeSimpleRepository附加功能

Now I want to "decorate" SomeSimpleRepository with additional functions

public class MoreAdvancedRespository : IRepository 
{ 
    private readonly IRepository _originalRepository;

    public MoreAdvancedRespository(IRepository original) 
    { }
}

在一段时间另外一个..

After awhile another one..

public class TrickyRepository : IRepository
{
    private readonly IRepository _originalRepository;

    public TrickyRepository (IRepository original) 
    { }
}

现在,我需要完成绑定。在实际应用中,我需要TrickyRepository的情况下,与MoreAdvancedRespository进行初始化。所以,我需要写的是这样的:

Now, I need to accomplish binding. In application I need the instance of TrickyRepository, to be initialized with MoreAdvancedRespository. So, I need to write something like:

Bind<IRepository>().To<TrickyRepository>.With ??

在这里,我很困惑,我需要以某种方式说,采取MoreAdvancedRespository但SomeSimpleRepository初始化。这是一种链必须要按照一个接口解析的依赖的。

Here I'm confused, I need somehow to say, take MoreAdvancedRespository but initialize it with SomeSimpleRepository. This is a kind of chain of dependencies that have to be resolved against one interface.

没有任何一个有建议在此?

Does any one have suggestion on this?

推荐答案

使用 WhenInjectedInto

Bind<IRepository>().To<MoreAdvancedRespository>
                   .WhenInjectedInto<TrickyRepository>();
Bind<IRepository>().To<SomeSimpleRepository>
                   .WhenInjectedInto<MoreAdvancedRespository>();

请参阅这篇博客获取更多信息。

这篇关于Ninject依赖注入Decorator模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆