我有许多(60或70)个类,它们对共享基类进行子类化。此基类公开类型为 ICacheProvider
的属性,当每个超类都注册到 structuremap 时,需要设置该属性。我正在使用结构图版本 2.6.1。目前,我正在为每个超类设置属性,因此:
For<IBusinessRule<IEnumerable<int>>>()
.Use<ManufacturersWithReviewsRule>()
.Named(NamedRuleConstants.ManufacturersWithReviews)
.Setter<ICacheProvider>().Is(ObjectFactory.GetNamedInstance<ICacheProvider>(CacheConstants.IndexCacheKeyPrefix));
For<IBusinessRule<IEnumerable<int>>>()
.Use<ManufacturersWithOwnersReviewsRule>()
.Named(NamedRuleConstants.ManufacturersWithOwnersReviews)
.Setter<ICacheProvider>().Is(ObjectFactory.GetNamedInstance<ICacheProvider>(CacheConstants.IndexCacheKeyPrefix));
For<IBusinessRule<IEnumerable<int>>>()
.Use<ManufacturersWithLivingWithItRule>()
.Named(NamedRuleConstants.ManufacturersWithLivingWithIt)
.Setter<ICacheProvider>().Is(ObjectFactory.GetNamedInstance<ICacheProvider>(CacheConstants.IndexCacheKeyPrefix));
(ManufacturersWithReviewsRule, ManufacturersWithOwnersReviewsRule, ManufacturersWithLivingWithItRule 每个子类 BaseBusinessRule)
我想做的是指定:
.Setter<ICacheProvider>().Is(ObjectFactory.GetNamedInstance<ICacheProvider>(CacheConstants.IndexCacheKeyPrefix));
一次适用于所有人,如果我需要不同的 ICacheProvider,我可以在必要时单独设置它。
使用结构图 2.6.1 可以做到这一点吗?我找不到办法。
对于类似的概念,当我想在默认级别上设置具有某种类型属性的任何对象时,我使用类似这样的东西
// during the ObjectFactory.Initialize
x.SetAllProperties(set => set.OfType<ICacheProvider>());
// something more...
// this way the instance could be shared
x.For<ICacheProvider>()
// as a singleton
.Singleton()
.Use<DefaultCacheProvider>();