我正在尝试将Web API控制器放在单独的DLL中。我已经覆盖了默认控制器选择以从我的自定义DLL中选择一个类,但它抛出了一个异常,我的类确实实现了IHttpController,尽管它很清楚。
我的班级看起来像这样:
public class GetItemController : ApiController
{
public GetItemController() { }
public string Execute(string id)
{
return id;
}
}
抛出异常的代码块如下所示:
public static Func<TBase> Create<TBase>(Type instanceType) where TBase : class
{
NewExpression body = Expression.New(instanceType);
return Expression.Lambda<Func<TBase>>(body, new ParameterExpression[0]).Compile();
}
它被称为:
Create<IHttpController>(typeof(GetItemController));
异常消息是:
'CustomDll.GetItemController' cannot be used for return type 'System.Web.Http.Controllers.IHttpController'
似乎它正在创建的表达式应该等同于以下函数:
public IHttpController temp() { return new GetItemController(); }
当我编写该方法时,不会抛出异常,所以我不确定我缺少什么。
答案 0 :(得分:0)
原来,@ p.s.w.g指出我不小心引用了两个不同的DLL。一个来自nuGet的主项目,另一个来自GAC的另一个DLL。一切都被命名为相同,所以它不是立即显而易见的,但这就是问题所在。