2012-11-01 43 views
1

我有一个asp.net的WebAPI项目,我是能够做到的控制器我可以让ninject实例化postsharp方面吗?

[Audit("Getting all foos")] 
public IEnumerable<Foo> GetAll() 
{ 
    return _fooService.GetAll(); 
} 

纵横/属性我已经创建了被称为审计中对这些方法的一些方面的导向编程。我使用ninject创建对象,但在其他地方,但各方面只是自行创建。

这会导致两个问题,首先我不能将属性注入到方面,因此必须在方面内手动创建对象。

其次,因为我不能够覆盖创建审计方面这样一个实际的测试,而不是嘲笑一个过程中创建的创建行为,它是打破我的单元测试。

我没有很多与国际奥委会的经验或ninject所以说实话我得到自己有点混淆。

有没有办法来强制通过ninject这些方面创造?


我使用的是最新版本的所有库是否有帮助。

我也碰到Ninject Intercept,但似乎更喜欢另类postsharp尽管我可能是很错了。

回答

4

上一页下一页尾页编辑修改您的代码。 Ninject无法通过这种方法传递依赖关系。但有一些事情可以做:

  1. 对于需要依赖关系的方面使用Ninject截取。这工作方式不同。 Ninject将动态创建一个装饰器类,并在调用之前和之后调用您的方面。这样它可以传递一些依赖关系。

  2. 方面通常用于横切关注。在这些情况下,为依赖关系创建环境上下文是完全合理的。这是一个静态类,它只提供一种依赖关系,例如IAuditLog。

public static class AuditLogProvider 
{ 
    public static AuditLog 
    { 
     get { return autitLog; } 
     set { 
       if (this.auditLog != null) throw new InvlaidOperationExcpetion("Audit is already configured"); 
       this.auditLog = value; 
      } 
    } 
} 

在你的引导程序,你现在可以初始化环境方面:

AuditLogProvider.AutitLog = kernel.Get<IAuditLog>(); 
+0

你有PostSharp多少经验?你认为在这种情况下使用它还是值得的,或者只是写一些我们自己的方面? – Neil

相关问题