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는 두 개의 생성자를 찾아서 각각 만족시키는 방법을 알고있는 두 개의 매개 변수를 갖습니다. 규칙은 대부분의 매개 변수를 사용하여 생성자를 가져 오는 것입니다. 그래서 둘 다 평등합니다. –