代码之家  ›  专栏  ›  技术社区  ›  Andy

在castlewindsor中实现和解决多个服务装饰器

  •  1
  • Andy  · 技术社区  · 14 年前

    我有一个服务接口(ILoader),它由多个加载程序类实现。我还有一个ILoader的实现,它是一个装饰器:

    public interface ILoader { }
    public class LoaderImpl0 : ILoader { }
    public class LoaderImpl1 : ILoader { }
    public class CachedLoader : ILoader
    {
        public CachedLoader(ILoader inner) { }
    }
    

    这是我的第一次尝试:

    container.Register
    (
        Component.For<LoaderImpl0>().Named("loader0"),
        Component.For<LoaderImpl1>().Named("loader1"),
        Component
        .For<ILoader>( )
        .ImplementedBy<CachedLoader>( )
        .ServiceOverrides( ServiceOverride.ForKey( "inner" ).Eq( "loader0" ) )
        .Named("cachedLoader0"),
        Component
        .For<ILoader>()
        .ImplementedBy<CachedLoader>()
        .ServiceOverrides(ServiceOverride.ForKey("inner").Eq("loader1"))
        .Named("cachedLoader1")
    );
    

    • container.ResolveAll<ILoader>() 返回所有4个注册的加载程序(即使我还没有注册加载程序impl。。。使用ILoader服务的类)。

    0 回复  |  直到 14 年前