0

嗨,我正在使用 Ninject IoC 容器。我无法将结构映射代码转换为 ninject。

这是 Structuremap 代码绑定

For<IProductCatalogService>().Use<ProductCatalogService>().Named("realProductCatalogService");
For<IProductCatalogService>().Use<CachedProductCatalogService>()
                  .Ctor<IProductCatalogService>().Is(p => p.TheInstanceNamed("realProductCatalogService"));

正在使用这样的 Ninject 代码

Kernel.Bind<IProductCatalogService>().To<ProductCatalogService>().Named("realProductCatalogService");
Kernel.Bind<IProductCatalogService>().To<CachedProductCatalogService>().Named("cachedProductCatalogService");

但这不起作用。

4

1 回答 1

1

我建议你想注入一些IProductCatalogServiceinto的实现CachedProductCatalogService,它也实现IProductCatalogService,然后在应用程序的其余部分中使用这个缓存的实现作为默认组件。

使用 Ninject,您可以使用如下.WhenParentNamed条件绑定对其进行配置:

Kernel.Bind<IProductCatalogService>()
      .To<ProductCatalogService>()
      .WhenParentNamed("cached");

Kernel.Bind<IProductCatalogService>()
      .To<CachedProductCatalogService>()
      .Named("cached");

当有请求时,IProductCatalogServiceninject 会尝试解析条件。如果父组件(请求注入)被命名"cached"CachedProductCatalogService在您的情况下),则 ninject 将返回ProductCatalogService,否则它将CachedProductCatalogService作为默认值返回。

于 2013-05-13T15:27:37.097 回答