2013-06-04 104 views
0

我想自動註冊名稱以「Service」結尾的所有接口,也沒有具體實現要解析爲生成的類型/代理(關閉每個接口的過程不同)。註冊沒有具體實現的接口返回生成的類型/代理

所以當我想解析IContractService我希望它返回一個代理對象。我從這個article中得到了這個想法,他們以某種方式與Castle Windsor一起實現了它。

什麼是結構圖方法來實現這一點。我嘗試了各種習俗和所有事情,但是我無法理解它。

回答

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>()))); 
      } 
     } 
} 
相關問題