gpt4 book ai didi

nested - 如何在 CaSTLe Windsor 中使用嵌套的接口(interface)实现?

转载 作者:行者123 更新时间:2023-12-05 00:37:07 26 4
gpt4 key购买 nike

假设我有一个用于获取数据的接口(interface)及其实现:

interface IResourceProvider
{
string Get( Uri uri );
}

class HttpResourceProvider : IResourceProvider
{
public string Get( Uri uri )
{
// Download via HTTP.
}
}

我可以在温莎城堡注册,如下所示:
container.Register
( Component.For<IResourceProvider>().ImplementedBy<HttpResourceProvider>()
);

(这都很好)。

如果我决定我想要一个缓存实现,如下所示:
class CachingResourceProvider : IResourceProvider
{
public CachingResourceProvider( IResourceProvider resourceProvider )
{
_resourceProvider = resourceProvider;
}

public string Get( Uri uri )
{
// Return from cache if it exists.
// Otherwise use _resourceProvider and add to cache.
}

private readonly IResourceProvider _resourceProvider;
}

我将如何注册这些嵌套的依赖项? 即,我想说一个 IResourceProviderCachingResourceProvider 实现, 除非在构造函数中,它是 HttpResourceProvider .

最佳答案

只需注册CachingResourceProvider之前 HttpResourceProvider - 例如

container.Register(Component
.For<IResourceProvider>()
.ImplementedBy<CachingResourceProvider>());
container.Register(Component
.For<IResourceProvider>()
.ImplementedBy<HttpResourceProvider>());

顺便说一句 - 这被称为 Decorator设计模式。

关于nested - 如何在 CaSTLe Windsor 中使用嵌套的接口(interface)实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com