我有许多(60或70)类,它们是共享基类的子类。此基类公开了类型ICacheProvider
的属性,当使用structuremap注册每个超类时,需要设置该属性。我使用的是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。
这是否可以使用structuremap 2.6.1?我无法做到这一点。
答案 0 :(得分: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>();