我想自动注册名称以“服务”结尾的所有接口,并且也没有具体的实现来解析为生成的类型/代理(每个接口当然不同)。
因此,当我想解决时,IContractService
我希望它返回一个代理对象。我从这篇文章中得到了这个想法,他们在 Castle Windsor 中以某种方式实现了它。
实现这一目标的结构图方法是什么。我用自定义约定尝试了所有类型的东西,但我无法理解它。
我想自动注册名称以“服务”结尾的所有接口,并且也没有具体的实现来解析为生成的类型/代理(每个接口当然不同)。
因此,当我想解决时,IContractService
我希望它返回一个代理对象。我从这篇文章中得到了这个想法,他们在 Castle Windsor 中以某种方式实现了它。
实现这一目标的结构图方法是什么。我用自定义约定尝试了所有类型的东西,但我无法理解它。
我通过使用 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>())));
}
}
}