Ой, это будет сложно сделать из управляемого кода.
В кодепероке
В качестве примера кода я предполагаю, что вы используете контроллер, а не API-контроллер (из веб-API).
Ваш контроллер API зависит от конструктора из HttpConfiguration
. Контейнер, вероятно, не имеет этого определения для этого типа и, следовательно, не знает, как его решить, и string
в сообщении об ошибке должно исходить из этого типа в качестве зависимости. Я рекомендую вам использовать статический класс GlobalConfiguration
и получить доступ к свойству Configuration
, чтобы получить экземпляр HttpConfiguration
. Вы можете абстрагировать его в свойстве, например, для: Контроллеры API) и получить экземпляр HttpConfiguration
.
Я думаю, что лучше добавить атрибут InjectionConstructor в конструктор по умолчанию. Этот атрибут заставляет единицы использовать декорированный конструктор.
Пример:
public class HelpController : Controller
{
private const string ErrorViewName = "Error";
[InjectionConstructor]
public HelpController()
: this(GlobalConfiguration.Configuration)
{
}
Причина этого заключается в том, что Unity по умолчанию выберет использование конструктора с наибольшим количеством параметров, минуя конструктор по умолчанию.
Закомментируйте два конструктора, которые существуют в шаблоне HelpController, и добавьте конструктор по умолчанию, который задает конфигурацию.
//public HelpController()
// : this(GlobalConfiguration.Configuration)
//{
//}
//public HelpController(HttpConfiguration config)
//{
// Configuration = config;
//}
public HelpController()
{
Configuration = GlobalConfiguration.Configuration;
}
Регистрация объекта HttpConfiguration
как экземпляра в UnityContainer
также поможет решить проблему.
Просто нужно добавить, чтобы добавить строку ниже при регистрации в UnityContainer
.
public static void RegisterTypes(IUnityContainer container) {
container.RegisterInstance<HttpConfiguration>(GlobalConfiguration.Configuration);
}
Это поможет Unity
разрешить параметр config
, когда он вызывает конструктор с параметром.
public HelpController(HttpConfiguration config) {
Configuration = config;
}