von*_* v. 13 c# simple-injector owin asp.net-web-api2
我遇到了与此处描述的问题相同的问题,我的设置几乎完全相同,实际上是基于本指南.当我在我的控制器中访问一个方法时,我得到了这个
尝试创建"TestController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.
这是堆栈跟踪
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator
.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor,
Type controllerType)\r\n
at System.Web.Http.Controllers.HttpControllerDescriptor
.CreateController(HttpRequestMessage request)\r\n
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()
Run Code Online (Sandbox Code Playgroud)
这是内部异常的堆栈跟踪
at System.Linq.Expressions.Expression.New(Type type)\r\n
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator
.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator
.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
Run Code Online (Sandbox Code Playgroud)
这是我的控制器的样子
public class TestController : ApiController
{
private readonly ITestRepo _repo;
public TestController(ITestRepo repo)
{
_repo = repo;
}
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
public string Get(int id)
{
return _repo.GetId(id);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何设置Simple Injector
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Create the container as usual.
var container = new Container();
// Register your types, for instance using the RegisterWebApiRequest
// extension from the integration package:
container.RegisterWebApiRequest<ITestRepo, TestRepo>();
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
//
ConfigureOAuth(app, container);
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*bal 22
我有同样的问题但使用UnityDependencyResolver.但我认为它也适用于SimpleInjectorWebApiDependencyResolver.尝试注册这样的解析器(作为HttpConfiguration的属性):
public void Configuration(IAppBuilder app)
{
var container = GetContainer(); // Initialise container
HttpConfiguration config = new HttpConfiguration
{
DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
};
WebApiConfig.Register(config);
app.UseWebApi(config);
}
Run Code Online (Sandbox Code Playgroud)