C# 后向方面注入依赖
是否可以将依赖注入PostSharp方面? 我想创建NavigateBackAspect-类似于:C# 后向方面注入依赖,c#,postsharp,C#,Postsharp,是否可以将依赖注入PostSharp方面? 我想创建NavigateBackAspect-类似于: [PSerializable] class NavigateBackAspect : OnMethodBoundaryAspect { private readonly INavigationService _navigationService; public NavigateBackAspect(INavigationService navigationService)
[PSerializable]
class NavigateBackAspect : OnMethodBoundaryAspect
{
private readonly INavigationService _navigationService;
public NavigateBackAspect(INavigationService navigationService)
{
_navigationService = navigationService;
}
public override void OnExit(MethodExecutionArgs args)
{
base.OnExit(args);
var viewModel = args.Instance as Shared.ViewModel.ViewModel;
if (viewModel != null)
{
viewModel.Dispose();
_navigationService.GoBack();
}
}
}
然而,我已经读到,构造函数/参数注入是不可能的,因为编译后只调用一次构造函数。有什么解决方法吗?这类事情是不可能的,主要是因为一般的属性,特别是方面,在构造函数中只能有常量表达式 在编译期间,每个aspected目标调用一次构造函数。发生这种情况后,将序列化该方面(以及它可能包含的任何内部数据)。它在运行时被反序列化,这意味着根本不调用构造函数。但是没有理由叫它;属性构造函数只能包含不易更改的常量数据。看看 但是,每个aspected目标仍然有自己的aspect实例。这意味着您可以在工作期间执行此操作。您有几个选择:
这里给出了这个问题的答案:@gaelfrateur与这个问题无关。但是,fex,您可能应该改写这个问题,而不使用短语“依赖注入”,因为它通常指各种IoC框架。正确。心理冲突——我只是碰巧回顾了这个反应。但那又如何: