I am now doing a dynamic query in my project by using System.Linq.Dynamic. I use Autofac as my default IOC container. But Now I get a problem on registering generic components, here is my code :
the interface:
public interface IDynamicQuery
{
IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool>> where) where T:class;
}
the 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;
}
}
Then I register them in the application start entry:
builder.RegisterType<IDynamicQuery>().As<DynamicQuery>().InstancePerHttpRequest();
But When I start up my project based on MVC 4, it throws me an exception like :
The type 'TinyFrame.Framework.Query.IDynamicQuery' is not assignable to service 'TinyFrame.Framework.Query.DynamicQuery'.
the Exception throws at : var container = builder.Build();
I know how to register a generic class in autofac, but I don't know how to register above class I raised, anyone can help me on this? I am a new comer to autofac, thx in advice.