使用 Decorator 模式进行 Ninject 依赖注入

发布于 2024-12-28 03:42:12 字数 895 浏览 1 评论 0原文

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

public interface IRepository { }

public class SomeSimpleRepository : IRepository {}

现在我想用附加功能“装饰” SomeSimpleRepository

public class MoreAdvancedRespository : IRepository 
{ 
    private readonly IRepository _originalRepository;

    public MoreAdvancedRespository(IRepository original) 
    { }
}

过了一会儿又一个..

public class TrickyRepository : IRepository
{
    private readonly IRepository _originalRepository;

    public TrickyRepository (IRepository original) 
    { }
}

现在,我需要完成绑定。在应用程序中,我需要 TrickyRepository 的实例,用 MoreAdvancedRespository 进行初始化。所以,我需要写一些类似的东西:

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

在这里我很困惑,我需要以某种方式说,采用 MoreAdvancedRespository 但用 SomeSimpleRepository 初始化它。这是一种必须针对一个接口来解决的依赖链。

有人对此有建议吗?

Say, I have such classes hierarchy:

public interface IRepository { }

public class SomeSimpleRepository : IRepository {}

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) 
    { }
}

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 ??

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断肠人 2025-01-04 03:42:12

使用 WhenInjectedInto

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

请参阅 这篇博文了解更多信息。

Use WhenInjectedInto:

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

See this blog post for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文