如何使用结构图为基类设置基类上属性,用于子类化它



我有许多(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>();

最新更新