Сейчас я делаю динамический запрос в своем проекте, используя System.Linq.Dynamic. Я использую Autofac в качестве контейнера IOC по умолчанию. Но теперь у меня проблема с регистрацией универсальных компонентов, вот мой код:
интерфейс:
public interface IDynamicQuery
{
IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool>> where) where T:class;
}
класс:
public class DynamicQuery :IDynamicQuery
{
public DynamicQuery(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
private readonly IUnitOfWork unitOfWork;
public IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool>> where) where T:class
{
var appRepository = unitOfWork.Repository<T>();
IQueryable<T> queryResult = null;
if (propertyName.Contains('$'))
propertyName = propertyName.Replace('$', '.');
queryResult = appRepository.GetMany(where).Where("" + propertyName + ".Contains(\"" + propertyValue + "\")");
return queryResult;
}
}
Затем я регистрирую их в записи запуска приложения:
builder.RegisterType<IDynamicQuery>().As<DynamicQuery>().InstancePerHttpRequest();
Но когда я запускаю свой проект на основе MVC 4, он выдает мне исключение, например:
The type 'TinyFrame.Framework.Query.IDynamicQuery' is not assignable to service 'TinyFrame.Framework.Query.DynamicQuery'.
Исключение выдает: var container = builder.Build();
Я знаю, как зарегистрировать общий класс в autofac, но я не знаю, как зарегистрировать выше класс, который я поднял, кто-нибудь может мне помочь в этом? Я новичок в autofac, спасибо за совет.
IDynamicQuery
— это неDynamicQuery
, аDynamicQuery
— этоIDynamicQuery
. - person Aron   schedule 28.04.2014