如何使用structuremap为所有子类的类设置属性?

时间:2014-01-03 11:32:42

标签: c# dependency-injection inversion-of-control structuremap

我有许多(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?我无法做到这一点。

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>();