0
我想自動註冊名稱以「Service」結尾的所有接口,也沒有具體實現要解析爲生成的類型/代理(關閉每個接口的過程不同)。註冊沒有具體實現的接口返回生成的類型/代理
所以當我想解析IContractService
我希望它返回一個代理對象。我從這個article中得到了這個想法,他們以某種方式與Castle Windsor一起實現了它。
什麼是結構圖方法來實現這一點。我嘗試了各種習俗和所有事情,但是我無法理解它。
我想自動註冊名稱以「Service」結尾的所有接口,也沒有具體實現要解析爲生成的類型/代理(關閉每個接口的過程不同)。註冊沒有具體實現的接口返回生成的類型/代理
所以當我想解析IContractService
我希望它返回一個代理對象。我從這個article中得到了這個想法,他們以某種方式與Castle Windsor一起實現了它。
什麼是結構圖方法來實現這一點。我嘗試了各種習俗和所有事情,但是我無法理解它。
我通過使用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>())));
}
}
}