Я использую Ninject для DI в приложении Silverlight. Сейчас я пытаюсь осуществить перехват и возникли проблемы. Мой метод не перехватывается. Ниже приведен пример реализации
public class InfrastructureModule : NinjectModule
{
public override void Load()
{
Bind<IGlobalEventManager>().To<GlobalEventManager>().InSingletonScope();
Bind<IViewModel>().To<ViewModel>().InSingletonScope();
}
}
В событии App.xaml -> Application_Startup я выполняю привязку и вызываю метод, который, как я ожидаю, будет перехвачен:
private void Application_Startup(object sender, StartupEventArgs e)
{
IKernel kernel = new StandardKernel(new InfrastructureModule());
IViewModel vm = kernel.Get<IViewModel>();
vm.SomeMethod();
this.RootVisual = new MainPage();
}
Реализация ViewModel:
public class ViewModel : IViewModel
{
[LockUI]
public virtual void SomeMethod()
{
MessageBox.Show("Hello");
}
}
Атрибут LockUI:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false,
Inherited = true)]
public class LockUIAttribute : InterceptAttribute
{
public override IInterceptor CreateInterceptor(IProxyRequest request)
{
return request.Context.Kernel.Get<LockUIInterceptor>();
}
}
Реализация LockUIInterceptor:
public class LockUIInterceptor : SimpleInterceptor
{
private IGlobalEventManager _globalEventManager;
public LockUIInterceptor(IGlobalEventManager globalEventManager)
{
_globalEventManager = globalEventManager;
}
protected override void BeforeInvoke(IInvocation invocation)
{
_globalEventManager.OnLockUI(this, EventArgs.Empty);
}
}
Реализация GlobalEventManager:
public class GlobalEventManager : IGlobalEventManager
{
private static int _asyncCallCount;
public event EventHandler UnLockUI;
public event EventHandler LockUI;
public void OnLockUI(object sender, EventArgs e)
{
if (LockUI != null)
{
_asyncCallCount += 1;
LockUI(sender, e);
}
}
public void OnUnlockUI(object sender, EventArgs e)
{
if (UnLockUI != null)
{
_asyncCallCount -= 1;
if (_asyncCallCount == 0)
UnLockUI(sender, e);
}
}
}
Я добавил ссылку на Castle.Core, Castle.DynamicProxy2, Ninject, Ninject.Extensions.Interception, Ninject.Extensions.Interception.DynamicProxy2
Может кто-нибудь, пожалуйста, помогите. Спасибо