簡體   English   中英

Ninject:同一類有兩次以上的匹配綁定可用

[英]Ninject: More than one matching bindings are available same class twice

給定此類:

public class UserQueryHandler : 
    IQueryHandler<UserCredentialsByUsernameQuery, UserJWTIdentity>,
    IQueryHandlerAsync<UserRoleByUserNameQuery, UserRole>
{

//..implementation}

public interface IQueryHandler<TParameter, TResult>
{
    TResult Retrieve(TParameter query);
}
public interface IQueryHandlerAsync<TParameter, TResult>
{
    Task<TResult> RetrieveAsync(TParameter query);
}

以及以下Ninject配置:

kernel.Bind(x => x
       .FromThisAssembly()
       .SelectAllClasses().InheritedFrom(typeof(IQueryHandler<,>))
       .BindAllInterfaces());

            kernel.Bind(x => x
             .FromThisAssembly()
             .SelectAllClasses().InheritedFrom(typeof(IQueryHandlerAsync<,>))
             .BindAllInterfaces());

我收到以下錯誤:

可以使用多個匹配的綁定。

匹配綁定:

1)從IQueryHandlerAsync {UserRoleByUserNameQuery,UserRole}綁定到UserQueryHandler

2)從IQueryHandlerAsync {UserRoleByUserNameQuery,UserRole}綁定到UserQueryHandler

激活路徑:

1)請求IQueryHandlerAsync {UserRoleByUserNameQuery,UserRole}

當嘗試使用此實例時:

var handler = _kernel.Get<IQueryHandlerAsync<UserRoleByUserNameQuery, UserRole>>();

可疑的是,我沒有在嘗試實例化其他接口實現時收到錯誤:

var handler = _kernel.Get<IQueryHandler<UserCredentialsByUsernameQuery, UserJWTIdentity>>();

如果我創建一個僅實現該接口的單獨類,該錯誤就會消失:

public class UserQueryHandler2 : 
    IQueryHandlerAsync<UserRoleByUserNameQuery, UserRole>
{
//..implementation works fine!! }

據我了解,該類被綁定了兩次,但是我不明白為什么會發生這種情況(可能是一個錯誤?)

BindAllInterfaces綁定該類型繼承的所有接口,就UserQueryHandler ,它是IQueryHandlerIQueryHandlerAsync 所以你的類型被綁定到IQueryHandlerAsync在Ninject配置的第一部分時,它的掃描,從繼承的所有類型IQueryHandler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM