我想用Castle Windsor拦截器创建自己的方面,并应用于视图模型类。城堡温莎拦截器上Caliburn查看模型
正如我所说,我使用Caliburn MVVM框架和DI我使用卡斯温莎。一切正常。
例如,我创建了简单的loggging拦截,这里是:
public class LoggingInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.Write("Log: Method Called: " + invocation.Method.Name);
invocation.Proceed();
}
}
这是简单的视图模型类 - 它是 “标签项”:
public class TabViewModel : Screen,
ITabViewModel
{
}
当我配置IoC和流利的API我想在视图模型类上应用这个拦截器。
container.Register(Component
.For<LoggingInterceptor>()
.LifeStyle
.Singleton
.Named("LogAspect"));
container.Register(Component
.For<ITabViewModel>()
.ImplementedBy<TabViewModel>()
.LifeStyle
.Transient
.Named("TabViewModel")
.Interceptors<LoggingInterceptor>());
当我试图从国际奥委会挑选视图模型:
var tabItem = IoC.Get<ITabViewModel>();
ActivateItem(tabItem);
我得到这个消息:
默认视图未找到Castle.Proxies.ITabViewModelProxy。 查看搜索包括:Castle.Proxies.IITabViewModelProxy Castle.Proxies.ITabViewModelProxys.IDefault Castle.Proxies.ITabViewModelProxys.Default
我也试过这种方式拦截广告应用程式。
[Interceptor(typeof(LoggingInterceptor))]
public class TabViewModel : Screen,
ITabViewModel
{
}
好吧,我知道Caliburn框架通过命名约定匹配View和View Model。
当我尝试挑选ITabViewModel的实现时,我得到了ITabViewModelProxy,对于ITabViewModelProxy我没有注册任何View。
代理的目标是TabViewModel,但我认为问题在于命名不匹配。
我不想重命名ViewModel,因为我想从XML文件配置代理。
那么什么是正确的方法?
谢谢你的帮助