在IDependencyResolver

时间:2015-12-22 14:35:45

标签: c# asp.net-web-api dependency-injection structuremap

我在WebAPI项目中使用StructureMap作为我的IoC容器。我想根据请求中的值(查询字符串或http标头)提供某些依赖项的不同实现。

StructureMap具有Profiles的概念,这绝对是完美的,我可以覆盖这样的依赖:

For<ISomeDependency>().Use<StandardImplementation>();
Profile("AlternateProfile", pr =>
{
   pr.For<ISomeDependency>().Use<AlternateImplementation>();
});

但是,我无法弄清楚我可以在WebAPI生命周期中使用此配置文件的位置。似乎应该在IDependencyResolver.BeginScope()中允许我这样做:

public IDependencyScope BeginScope()
{
    var request = ??!?
    if (/* Check an HTTP Header for the request or something here? */)
        child = _container.GetNestedContainer("AlternateProfile");
    else
        child = _container.GetNestedContainer();
    return new WebApiStructureMapDependencyResolver(child);
}

WebAPI中的DI设置确实看起来很糟糕,但我希望我只是错过了一些愚蠢的东西。

注意:我使用的是自托管的WebAPI,因此无法使用以下解决方法:https://stackoverflow.com/a/19776966

0 个答案:

没有答案