【发布时间】:2019-01-04 03:55:09
【问题描述】:
我正在使用 OWIN 在使用 galasoft mvvmlight 框架的 wpf 桌面应用程序中自行托管 Web api Web 服务。当我尝试将我的模型数据服务之一依赖注入到 web api 控制器时,我收到一个关于“确保控制器具有无参数的公共构造函数”的错误。
我了解 Web api 控制器不支持开箱即用的依赖注入。我看过很多例子,详细说明了如何在使用 Unity 或编写自己的代码时提供自定义 IDependencyResolver。使用 mvvmlight SimpleIoc.Default 设置 web api 启动类 HttpConfiguration 对象的 DependencyResolver 属性有没有直接的方法?
作为一种解决方法,我目前通过在我的 api 控制器构造函数中调用 SimpleIoc.Default.GetInstance() 来设置我的数据服务。这可行,并且在功能上可能与依赖注入机制相同,但依赖注入似乎更优雅。
public class webApiStartup {
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "FileServerApi",
routeTemplate: "{controller}/{filename}"
,defaults: new { Controller = "filesController" }
);
//*
//* The Following line of Code does not work. But intellisense suggests
//* that there is a conversion available ?
//*
config.DependencyResolver = (IDependencyResolver)SimpleIoc.Default;
appBuilder.UseWebApi(config);
}
}
//*
//* This constructor for the web api controller works
//* but it is not as elegant as dependency injection
//*
public class filesController : ApiController
{
ILocalDataService _LocalDataSvc = null;
public filesController() {
_LocalDataSvc = SimpleIoc.Default.GetInstance<ILocalDataService>();
}
【问题讨论】:
标签: c# mvvm dependency-injection asp.net-web-api2 mvvm-light