我有以下界面:
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());
现在一切都按预期工作了!