c# - 调用链中同一装饰器的多次注册

标签 c# dependency-injection inversion-of-control simple-injector

我正在使用 SimpleInjector 进行依赖注入(inject),我刚刚发现我可以在单个调用链中多次注册相同的装饰器,并且装饰器将根据请求的配置应用。例如,我可以插入 RepositoryTraceDecorator 作为存储库类的第一个和最后一个装饰器:

container.RegisterDecorator(typeof(IRepository<>), 
    typeof(RepositoryTraceDecorator<>));
container.RegisterDecorator(typeof(IRepository<>),
    typeof(RepositoryDetectChangesDecorator<>));
container.RegisterDecorator(typeof(IRepository<>),
    typeof(CrossRepositoryTransactionScopeDecorator<>));
container.RegisterDecorator(typeof(IRepository<>),
    typeof(RepositoryTraceDecorator<>));
container.RegisterDecorator(typeof(IRepository<>),
    typeof(RepositoryExceptionDecorator<>));

这是设计使然,因此我可以依赖此功能吗?

最佳答案

Is this by design and therefore can I depend on this feature?

正如您刚刚所示,在链中多次应用装饰器可能很有用,并且在未来版本中更改此行为将是一个重大更改。我可以向您保证,您可以安全地依赖这一点,并且这种行为不会改变。

future 可能发生的是新的 Diagnostics feature得到改进以检测此问题并警告您有多个相同的装饰器。

关于c# - 调用链中同一装饰器的多次注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14952581/

相关文章:

c# - Github api 使用 octokit.net 获取按标签过滤的问题

Angular:在 AoT 中提供 Http

php - 依赖注入(inject)回退可以吗?

c# - DDD 中的每个服务类都有一个接口(interface)是一种好的设计实践吗?

c# - IoC 容器 - 仅为特定服务注入(inject)新的 DbContext 实例

c# - 删除 Windows Phone 页面

c# - System.Data.SQlite 未显示在 Visual Studio 2013 的更改数据源中

ios - 如何修改依赖注入(inject)模式中的对象

c# - caSTLe windsor - 没有为此对象定义无参数构造函数

c# - 使用LINQ从类属性计算百分比的更好方法