我已经实现并为我的测试用例实现了ODataControllerExtensions类。我选择使用NSubstitue来模拟DbContext和Entities。如何为Microsoft.OData.Edm.IEdmModel注册服务类型
的问题是,当我试图让ODataPath
public static IQueryable<TResult> InvokeForTest<T, TResult>(this T controller, HttpMethod method, string entitySetName, string relativeSubPathUri, Func<T, ODataQueryOptions<TResult>, IQueryable<TResult>> expression)
where T : ODataController
where TResult : class
{
return controller.InvokeForTest(method, relativeSubPathUri, x =>
{
var builder = new ODataConventionModelBuilder();
builder.EnableLowerCamelCase();
builder.EntitySet<TResult>(entitySetName);
IEdmModel model = builder.GetEdmModel();
string pathString = string.Format("{0}{1}", entitySetName, relativeSubPathUri);
ODataPath path = new DefaultODataPathHandler().Parse("https://any//", pathString, new ResolverIndirection(controller.Configuration.DependencyResolver));
var context = new ODataQueryContext(model, typeof(TResult), path);
var options = new ODataQueryOptions<TResult>(context, controller.Request);
// Run the expression.
return expression(x, options);
});
}
,当我试图让IServiceProvider的
new ResolverIndirection(controller.Configuration.DependencyResolver)
class ResolverIndirection : IServiceProvider
{
private readonly IDependencyResolver _resolver;
public ResolverIndirection(IDependencyResolver resolver)
{
_resolver = resolver;
}
public object GetService(Type serviceType)
{
return _resolver.GetService(serviceType);
}
}
的例外,我得到的是问题出现。
System.InvalidOperationException:没有为'Microsoft.OData.Edm.IEdmModel'类型注册服务。
我想知道是否有办法注册EdmlModel的服务类型。如果我以错误的方式回答这个问题,我会提出一些建议,告诉我如何做到这一点。
由于