使用构造函数中的服务为全局过滤器配置DI容器

C农

我有一个使用SimpleInjector和MVC的站点,并且试图确定在体系结构上哪里出了问题。

我正在设置我的DI容器:

public static class DependencyConfig
{
    private static Container Container { get; set; }

    public static void RegisterDependencies(HttpConfiguration configuration)
    {
          *snip*

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters, Container);
    }
}

我的RegisterGlobalFilters看起来像这样:

public static class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters, Container container)
    {
        filters.Add(new HandleErrorAttribute());

        filters.Add(container.GetInstance<OrderItemCountActionFilterAttribute>());

        if (container.GetInstance<ISiteConfiguration>().ConfiguredForExternalOrders)
        {
            filters.Add(container.GetInstance<StoreGeolocationActionFilterAttribute>());
        }

        filters.Add(container.GetInstance<StoreNameActionFilterAttribute>());
    }
}

商店可以在商店的售货亭或在家中通过网上订购订单。外部订单将需要进行地理位置定位,以向客户显示有关其最近商店的信息。但这意味着我必须将该容器用作全局过滤器中的服务定位器,这意味着我必须在DI容器中隐藏对全局过滤器的调用。在我看来,所有这些都像是一种反模式,或者应该有一种更好的方法来做到这一点。

C农

在与系统架构师进行了一些讨论之后,我们得出了一个(令人尴尬的简单结论),即对我们的体系结构的最佳答案是在我们的DI容器中创建两个Register函数-一个称为RegisterCorporateWebSiteDependencies()和另一个RegisterStoreWebsiteDependencies()。

它的自然扩展是在依赖项组合之后还具有2个全局过滤器配置,(再次)对于RegisterCorporateGlobalFilters()一个,对于RegisterStoreGlobalFilters()一个。

这将导致一个整体if语句运行寄存器ex:

if (Convert.ToBoolean(ConfigurationManager.AppSettings["IsCorporate"]))
{
    DependencyConfig.RegisterCorporateWebSiteDependencies(GlobalConfiguration.Configuration);
}
else
{
    DependencyConfig.RegisterStoreWebSiteDependencies(GlobalConfiguration.Configuration);
}

这更加直接,并且从其他可能会引起混淆的位置删除了逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ninject进行过滤器构造函数注入

来自分类Dev

如何在AngularJS中为另一个过滤器DI一个过滤器?

来自分类Dev

对全局过滤器使用AttributeAuthorization

来自分类Dev

使用jQuery为表中的li创建过滤器

来自分类Dev

在WebSecurityConfigurerAdapter中配置过滤器

来自分类Dev

如何在angularjs中为不同的模块创建全局过滤器

来自分类Dev

在构造函数过滤器中扩展/覆盖父级的方法

来自分类Dev

Vec:过滤器:我不确定构造函数是否应该使用这种情况[]

来自分类Dev

Matlab中的函数过滤器

来自分类Dev

过滤器函数中的类型错误

来自分类Dev

AngularJS使用函数作为过滤器

来自分类Dev

如何在过滤器数据表中使用全局过滤器

来自分类Dev

使用EPStatementObjectModel(Esper)在事件过滤器中引用命名的全局表达式

来自分类Dev

在Spring Boot中为Servlet配置添加过滤器

来自分类Dev

如何在.testcaferc配置文件中为夹具元设置多个过滤器?

来自分类Dev

在JBoss 7中创建全局过滤器

来自分类Dev

mvc过滤器中的全局依赖注入

来自分类Dev

对所有实体使用全局查询过滤器

来自分类Dev

在 AngularJS 中,如何在过滤器过滤函数中使用参数?

来自分类Dev

Google表格中的ImportXML函数-为应用的过滤器计算唯一结果

来自分类Dev

如何使用rxjs中的过滤器

来自分类Dev

在 React 中过滤结果的过滤器函数的可变版本?

来自分类Dev

如何在Tableau中的过滤器条件公式中将“过滤器”设置为“全部”?

来自分类Dev

将@Autowired与在SpringBoot中配置的过滤器一起使用

来自分类Dev

布隆过滤器中的过滤器索引和哈希函数

来自分类Dev

使用过滤器抽象函数的is_prime函数

来自分类Dev

在dplyr的summary函数中使用过滤器函数

来自分类Dev

(如何)可以将过滤器/参数与Apigility中的DB连接服务一起使用?

来自分类Dev

|如何不使用服务模板中的原始过滤器|

Related 相关文章

  1. 1

    使用Ninject进行过滤器构造函数注入

  2. 2

    如何在AngularJS中为另一个过滤器DI一个过滤器?

  3. 3

    对全局过滤器使用AttributeAuthorization

  4. 4

    使用jQuery为表中的li创建过滤器

  5. 5

    在WebSecurityConfigurerAdapter中配置过滤器

  6. 6

    如何在angularjs中为不同的模块创建全局过滤器

  7. 7

    在构造函数过滤器中扩展/覆盖父级的方法

  8. 8

    Vec:过滤器:我不确定构造函数是否应该使用这种情况[]

  9. 9

    Matlab中的函数过滤器

  10. 10

    过滤器函数中的类型错误

  11. 11

    AngularJS使用函数作为过滤器

  12. 12

    如何在过滤器数据表中使用全局过滤器

  13. 13

    使用EPStatementObjectModel(Esper)在事件过滤器中引用命名的全局表达式

  14. 14

    在Spring Boot中为Servlet配置添加过滤器

  15. 15

    如何在.testcaferc配置文件中为夹具元设置多个过滤器?

  16. 16

    在JBoss 7中创建全局过滤器

  17. 17

    mvc过滤器中的全局依赖注入

  18. 18

    对所有实体使用全局查询过滤器

  19. 19

    在 AngularJS 中,如何在过滤器过滤函数中使用参数?

  20. 20

    Google表格中的ImportXML函数-为应用的过滤器计算唯一结果

  21. 21

    如何使用rxjs中的过滤器

  22. 22

    在 React 中过滤结果的过滤器函数的可变版本?

  23. 23

    如何在Tableau中的过滤器条件公式中将“过滤器”设置为“全部”?

  24. 24

    将@Autowired与在SpringBoot中配置的过滤器一起使用

  25. 25

    布隆过滤器中的过滤器索引和哈希函数

  26. 26

    使用过滤器抽象函数的is_prime函数

  27. 27

    在dplyr的summary函数中使用过滤器函数

  28. 28

    (如何)可以将过滤器/参数与Apigility中的DB连接服务一起使用?

  29. 29

    |如何不使用服务模板中的原始过滤器|

热门标签

归档