如何注册一个没有autofac实现的接口?

时间:2014-01-12 11:02:14

标签: autofac

如何使用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
    }
}

2 个答案:

答案 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>();