0

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

因此,当我想解决时,IContractService我希望它返回一个代理对象。我从这篇文章中得到了这个想法,他们在 Castle Windsor 中以某种方式实现了它。

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

4

1 回答 1

0

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

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>())));
            }
        }
}
于 2013-06-05T07:50:15.137 回答