總之,看看加載的程序集(增加額外的濾波如果需要的話 - 如果沒有緩存是在引導完成)添加默認攔截器實現指定的標記接口類型。
container.AddNewExtensionIfNotPresent<Interception>();
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
Type[] types = assembly.GetTypes().Where(x => x.IsClass && typeof(T).IsAssignableFrom(x) && x.GetType() != typeof(T)).ToArray();
foreach (Type t in types)
{
container.Configure<Interception>().SetDefaultInterceptorFor(t, new VirtualMethodInterceptor());
}
}
編輯:
上面可以使用流利API完成,並且意味着我們沒有關於AppDomain.CurrentDomain.GetAssemblies)的naiive依賴性((其包含難道不在流利API配置應用的濾波
.Include(If.Implements<IBusinessService>, (x, y) =>
{
if (x.IsClass)
y.Configure<Interception>().
SetDefaultInterceptorFor(x,
new VirtualMethodInterceptor
());
})
我可以使用反射和通用擴展方法..... – brumScouse 2012-07-26 15:15:38