2013-10-15 94 views
0

我有一個MVC屬性的設置是這樣的:Ninject不能枚舉屬性綁定到過濾器

public class Activity : FilterAttribute 
{ 
    public string[] Tags { get; set; } 
    public Directive Directive { get; set; } 
} 

和相應的過濾器類

public class ActivityFilter : IActionFilter 
{ 
    public ActivityFilter(IService service, IEnumerable<string> tags, Directive directive) 
    { 
     ... 
    } 
} 

我綁定的屬性篩選注射看起來是這樣的:

this.BindFilter<ActivityFilter>(FilterScope.Action, 0) 
    .WhenActionMethodHas<Activity>() 
    .WithPropertyValueFromActionAttribute<Activity>("tags", a => a.Tags) 
    .WithPropertyValueFromActionAttribute<Activity>("directive", a => a.Directive); 

當我嘗試調試我的網站時,我從Ninject得到一個錯誤,指出它不能激活ActivityFilter因爲沒有匹配的綁定可用於INT,具體如下:

ActivationException:錯誤激活INT 沒有匹配的綁定是可用的,並且類型不是自可綁定。 激活路徑:

2)依賴INT的注入型ActivityFilter的構造

1)請求的參數指令爲ActivityFilter

好像Ninject被曲解枚舉參數對於一個整數,但我不知道如何解決這個問題。

回答

0

的問題最終是我用結合的方法:

this.BindFilter<ActivityFilter>(FilterScope.Action, 0) 
    .WhenActionMethodHas<Activity>() 
    .WithPropertyValueFromActionAttribute<Activity>("tags", a => a.Tags) 
    .WithPropertyValueFromActionAttribute<Activity>("directive", a => a.Directive); 

我應該用WithConstructorArgumentFromActionAttribute因爲我試圖注入一個構造函數的參數(我誤以爲構造函數/屬性簡稱值,而不是目的地

有一次,我改變了這一點,工作得很好。