Я использую OWIN для самостоятельного размещения веб-службы веб-API в настольном приложении wpf, которое использует инфраструктуру galasoft mvvmlight.Когда я пытаюсь ввести зависимости в один из моих сервисов данных модели в контроллер веб-API, я получаю сообщение об ошибке «Убедитесь, что у контроллера есть открытый конструктор без параметров».
Я понимаю, что контроллер веб-API не будет поддерживать внедрение зависимостей из коробки.Я видел множество примеров, подробно описывающих, как предоставить пользовательский IDependencyResolver
при использовании Unity или написать свой собственный.Есть ли прямой способ установить свойство DependencyResolver
класса запуска веб-API HttpConfiguration
объекта, используя mvvmlight SimpleIoc.Default
?
В качестве обходного пути, я в настоящее время устанавливаю службу данных, вызывая SimpleIoc.Default.GetInstance()
вмой конструктор контроллера API.Это работает и может быть функционально таким же, как полагаться на механизм внедрения, но внедрение зависимости кажется более элегантным.
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>();
}