您好我正在使用Ninject IoC容器。我无法将结构图代码转换为ninject。
这是结构图代码绑定
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");
但这不起作用。
答案 0 :(得分:1)
我建议您将IProductCatalogService
的一些实现注入到CachedProductCatalogService
中,它还实现IProductCatalogService
,然后在应用程序的其余部分中使用此缓存的实现作为默认组件。< / p>
使用Ninject,您可以使用.WhenParentNamed
条件绑定对其进行配置,如下所示:
Kernel.Bind<IProductCatalogService>()
.To<ProductCatalogService>()
.WhenParentNamed("cached");
Kernel.Bind<IProductCatalogService>()
.To<CachedProductCatalogService>()
.Named("cached");
当有IProductCatalogService
ninject的请求时,将尝试解决这些问题。如果父组件(要求注入)名为"cached"
(在您的情况下为CachedProductCatalogService
),则ninject将返回ProductCatalogService
,否则将返回{ {1}}为默认值。