【发布时间】:2014-01-03 11:32:41
【问题描述】:
我有许多(60 或 70)类是共享基类的子类。这个基类公开了一个ICacheProvider 类型的属性,当每个超类注册到结构映射时需要设置该属性。我正在使用结构图版本 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 吗?我找不到办法。
【问题讨论】:
-
我的第一印象是你应该完全抛弃基类并使用装饰器实现缓存(一个横切关注点)。
标签: c# dependency-injection inversion-of-control structuremap