2014-01-12 129 views
0

如何註冊一個沒有使用Autofac實現的界面?如何註冊一個沒有autofac實現的接口?

我想Autofac使用DynamicProxy生成界面你我!

builder.RegisterType(typeof(IUserDao)) 
    .AsImplementedInterfaces() 
    .EnableInterfaceInterceptors() 
    .InterceptedBy(typeof(SqlMapperInterceptor)); 


public class SqlMapperInterceptor : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     //todo: mapper sql file and return data 
    } 
} 

回答

0

必須有東西要攔截,否則就不能攔截。解決方案是創建一個虛擬IUserDao實現a.k.a.空對象模式。這個虛擬cwn在Autofac中被註冊爲實現。

+0

哈瓦任何其他方式我不t想要impl空對象類,我可以使用Castle.DynamicProxy的CreateInterfaceProxyWithoutTarget,但我不知道如何使用Autofac.Extras.DynamicProxy做到這一點。 'ProxyGenerator proxyGen = new ProxyGenerator(); var userDaoProxy = proxyGen.CreateInterfaceProxyWithoutTarget (new SqlMapperInterceptor());' – user3187103

0

目前沒有機制通過Autofac提供的DynamicProxy2整合,實現這一點,但它仍然可以通過註冊與Autofac直接生成的代理接口來完成:

builder.Register(c => 
{ 
    var proxyGen = new ProxyGenerator(); 
    return proxyGen.CreateInterfaceProxyWithoutTarget<IUserDao>(new SqlMapperInterceptor()); 
}) 
.As<IUserDao>(); 
相關問題