Настройка внедрения зависимостей с помощью 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.

Так что я иду по этому пути совершенно неправильно или есть какой-то другой способ ввести эти внутренние классы?

Ответы на вопрос(2)

Ваш ответ на вопрос