Настройка внедрения зависимостей с помощью ASP.NET Web API 2.1
Я создаю сайт ASP.NET Web API 2.1 и, поскольку я хочу внедрить зависимости непосредственно в контроллеры, я создал свою собственную реализацию IDependencyResolver, чтобы StructureMap справился с этим для меня.
public class StructureMapDependencyResolver : IDependencyResolver
{
public IDependencyScope BeginScope()
{
return this;
}
public object GetService(Type serviceType)
{
return ObjectFactory.GetInstance(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return ObjectFactory.GetAllInstances(serviceType).Cast<object>();
}
public void Dispose()
{
}
}
Затем я сказал Web API использовать этот класс, добавив эту строку в метод Application_Start в Global.asax.
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver();
Это скомпилировано, но когда я попытался получить доступ к любому из методов API в браузере, я получил такую ошибку
No Default Instance defined for PluginFamily System.Web.Http.Hosting.IHostBufferPolicySelector, System.Web.Http
Это было относительно легко решить, когда я добавил строку в свою конфигурацию StructureMap.
this.For<IHostBufferPolicySelector>().Use<WebHostBufferPolicySelector>();
Однако затем я получил другие подобные ошибки для других классов System.Web.Http, и хотя я мог разрешить некоторые из них, я застрял в том, как справиться с 3 из них, а именно ITraceManager, IExceptionHandler и IContentNegotiator.
Проблема заключается в том, что TraceManager, который, по-видимому, является реализацией ITraceManager по умолчанию, является внутренним классом, и поэтому я не могу ссылаться на него в своей конфигурации StructureMap.
Так что я иду по этому пути совершенно неправильно или есть какой-то другой способ ввести эти внутренние классы?