stu*_*ith 4 castle-windsor nested inversion-of-control
假设我有一个用于获取数据的接口,以及它的实现:
interface IResourceProvider
{
string Get( Uri uri );
}
class HttpResourceProvider : IResourceProvider
{
public string Get( Uri uri )
{
// Download via HTTP.
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在Castle Windsor注册,如下:
container.Register
( Component.For<IResourceProvider>().ImplementedBy<HttpResourceProvider>()
);
Run Code Online (Sandbox Code Playgroud)
(这都很好).
如果我然后决定我想要一个缓存实现如下:
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;
}
Run Code Online (Sandbox Code Playgroud)
我如何注册这些嵌套的依赖项?即,我想说一个IResourceProvider是由a实现的CachingResourceProvider,除了在构造函数中的位置,它是a HttpResourceProvider.
只需注册CachingResourceProvider之前HttpResourceProvider-如
container.Register(Component
.For<IResourceProvider>()
.ImplementedBy<CachingResourceProvider>());
container.Register(Component
.For<IResourceProvider>()
.ImplementedBy<HttpResourceProvider>());
Run Code Online (Sandbox Code Playgroud)
BTW - 这被称为装饰器设计模式.
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |