注册没有具体实现的接口以返回生成的类型/代理

时间:2013-06-04 17:09:39

标签: castle-windsor structuremap

我想自动注册名称以“Service”结尾的所有接口,并且没有具体的实现要解析为生成的类型/代理(每个接口当然不同)。

所以,当我想解决IContractService时,我希望它返回一个代理对象。我从这个article得到了这个想法,他们以某种方式与Castle Windsor一起实现了它。

实现这一目标的结构图方法是什么?我用自定义约定尝试了各种各样的东西,但我无法理解它。

1 个答案:

答案 0 :(得分:0)

我通过使用Castle的动态代理和StructureMap约定来解决这个问题。 BTW。我还重命名了article中提到的一些类。

public class InfraRegistry : Registry
{
        public InfraRegistry()
        {                     
            For<IClientProviderFactory>().Use<WcfClientProviderProviderFactory>();

            Scan(scan =>
                {
                    scan.AssemblyContainingType<MidleWareServiceConvention>();                    
                    scan.Convention<MidleWareServiceConvention>();
                });   
        }
}

public class MidleWareServiceConvention : IRegistrationConvention
{
        private readonly ProxyGenerator _proxyGen = new ProxyGenerator();

        public void Process(Type type, Registry registry)
        {
            if (type.IsInterface && type.Name.EndsWith("Service", StringComparison.OrdinalIgnoreCase))
            {
                registry.For(type)
                        .HybridHttpOrThreadLocalScoped()
                        .Use(
                            context =>
                            _proxyGen.CreateInterfaceProxyWithoutTarget(type,
                                                                        new WcfInterceptor(
                                                                            context.GetInstance<IClientProviderFactory>())));
            }
        }
}
相关问题