如何使用Autofac注册没有实现的接口?
我希望Autofac使用动态代理生成我的界面!
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 :(得分:0)
必须有一些东西可以拦截,否则就不会拦截。解决方案是创建一个虚拟的IUserDao实现a.k.a.Null Object Pattern。这个虚拟cwn在Autofac中注册为实现。
答案 1 :(得分:0)
目前还没有通过Autofac提供的DynamicProxy2集成来实现这一目标的机制,但它仍然可以通过直接向Autofac注册生成的代理接口来实现:
builder.Register(c =>
{
var proxyGen = new ProxyGenerator();
return proxyGen.CreateInterfaceProxyWithoutTarget<IUserDao>(new SqlMapperInterceptor());
})
.As<IUserDao>();