2014-01-12 1 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. Null Object Pattern. Этот фиктивный cwn будет зарегистрирован как реализация в Autofac.

+0

Хава любым другим способом я не» я хочу использовать объект класса null, я могу использовать CreateInterfaceProxyWithoutTarget от Castle.DynamicProxy, но я не знаю, как это сделать с помощью Autofac.Extras.DynamicProxy. 'ProxyGenerator proxyGen = new ProxyGenerator(); var userDaoProxy = proxyGen.CreateInterfaceProxyWithoutTarget (новый SqlMapperInterceptor()); ' – user3187103

0

Там в настоящее время нет механизма для достижения этой цели путем интеграции DynamicProxy2 предоставленной Autofac, но он все еще может быть сделано путем регистрации сгенерированный прокси-интерфейс с Autofac непосредственно:

builder.Register(c => 
{ 
    var proxyGen = new ProxyGenerator(); 
    return proxyGen.CreateInterfaceProxyWithoutTarget<IUserDao>(new SqlMapperInterceptor()); 
}) 
.As<IUserDao>(); 
Смежные вопросы