将通用接口与ninject中的多个实现绑定

时间:2016-10-26 13:47:31

标签: c# interface ninject ninject-extensions

我有以下界面:

public interface IQueryStringHelper<T, in TQueryString> where T : class where TQueryString : class
{
    IQueryable<T> ApplyQueryStringToQuery(IQueryable<T> query, TQueryString queryString, out int count);
}

它在其中一个类中的实现如下:

public class BookingQueryStringHelper : IQueryStringHelper<Booking, BookingsQueryString>
{
    public IQueryable<Booking> ApplyQueryStringToQuery(IQueryable<Booking> query, BookingsQueryString queryString, ICmsDbContext _cmsDbContext, out int count)
    {
          var cat....
    }
}

我有许多不同的类使用这个通用接口,我想在ninject中绑定它,但到目前为止有0个成功。我不希望每个实现一行(我知道它有效)。

我试过写这样的东西:

    kernel.Bind(x => x.FromThisAssembly()
          .SelectAllClasses()
          .InheritedFrom(typeof(IQueryStringHelper<,>))
          .BindSingleInterface());

        kernel.Bind(x =>
            x.FromThisAssembly()
            .SelectAllClasses()
            .InheritedFrom(typeof(IQueryStringHelper<,>))
            .BindToSelf());

但我无法让它工作

非常欢迎所有帮助!

*编辑 @Steven指出了我正确的方向,所以bind语句如下:

kernel.Bind(x =>
                x.FromAssemblyContaining(typeof(IQueryStringHelper<,>))
                .SelectAllClasses()
                .InheritedFrom(typeof(IQueryStringHelper <,>))
                .BindSingleInterface());

现在一切都按预期工作了!

0 个答案:

没有答案