如果我不包含Ninject.Extension.Factory 3.2.0.0 3/21/2014構建,我有一個MVC5,WebApi應用程序可以正常工作。有一次,我補充一點,包裝的應用有以下異常:Ninject 3.2使用Ninject.Extension.Factory時綁定的BindFilter構造函數綁定3.2
Error activating EntitleActionFilter using self-binding of EntitleActionFilter
Several constructors have the same priority. Please specify the constructor using ToConstructor syntax or add an Inject attribute.
Constructors:
EntitleActionFilter(List{NavigationItem} navigationItemsFunc{IEnumerable{string}} permissionFunc)
EntitleActionFilter(List{NavigationItem} navigationItemsFunc{IEnumerable{int}} permissionFuncInt)
我使用以下Ninject包(週五所有,2014年3月21日版本):
- Ninject 3.2.0.0
- Ninject.MVC5 3.2.0.0
- Ninject.Web.Common 3.2.0.0
- Ninject.Web.Common.WebHost 3.2.0.0
這兩個構造函數是唯一的。綁定看起來像:
Func<IEnumerable<int>> permissionFunc =() => Kernel.Get<INavigationPermissionsProvider>().GetPermissionsInt();
this.BindFilter<EntitleActionFilter>(FilterScope.Controller, 0)
.WithConstructorArgument("navigationItems",
context => context.Get<NavigationHelper>().GetNavigation().NavigationItems)
.WithConstructorArgument("permissionFuncInt", permissionFunc);
我確實使用Ninject工廠很多,需要此包。如果我刪除Ninject.Extensions.Factory 3.2包,一切正常。這個代碼與之前的3.0版Ninject和工廠擴展一起工作。
雷莫,謝謝!我不確定爲什麼這些構造函數具有相同的優先級。他們有不同的類型,不同的參數名稱,我綁定到特定的構造函數。 EntitleActionFilter(名單{NavigationItem} navigationItemsFunc {IEnumerable的{[黑體]串/粗體]}} permissionFunc) EntitleActionFilter(名單{NavigationItem} navigationItemsFunc {IEnumerable的{[黑體] INT [/粗體]}} permissionFuncInt) – mbeall
沒有你沒有綁定到特定的構造函數。這可以通過BindFilter的其他重載來完成。你正在綁定一個過濾器,並告訴Ninject它可以選擇它感覺最適合的構造函數並添加它可能使用的兩個構造函數參數。 Ninject發現兩個構造函數,每個構造函數都有2個參數,它知道如何滿足。規則是採用最多參數的構造函數。所以兩者都是平等的。 –