【问题标题】:How do I set a property on a base class for all classes that subclass it, using structuremap?如何使用结构映射在基类上为所有子类的类设置属性?
【发布时间】: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


【解决方案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>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多