3

我们正在构建一个 .NET 应用程序,我想集成一个框架来执行 DI 和一些 AOP(注入一些诊断/日志记录代码)。

我知道那里有很多框架,我不确定要选择哪一个,因为每个审查它们的网站都会给出不同的结果和意见。

我很想听听一些基于现实世界经验的客观信息来做我们需要的事情(上面列出的)。

4

2 回答 2

2

简短回答:看看 PRISM、UNITY 和 MEF,以完全了解 Microsoft 模式和(最佳)实践领域。没有理由从那个 imo 转移,除非你做非常小的项目(Prism 可能过大)。

于 2012-05-29T09:37:22.383 回答
1

答案最重要的是应用程序的设计。如果您围绕SOLID原则设计应用程序,那么添加横切关注点将像编写装饰器一样简单。换句话说,当你需要像 Postsharp 这样的代码编织框架或者需要做拦截时,你可能需要再次仔细审视你的设计。例如,看看如何使用命令和处理程序对业务操作进行建模,或者如何将查询建模为DTO 和处理程序

所有容器都允许您使用装饰器包装服务,仅仅是因为您可以注册一个执行以下操作的 lambda:

container.Register<ICommandHandler<ProcessOrderCmd>>(() =>
    new DiagnosticsCommandHandlerDecorator<ProcessOrderCmd>(
        new ProcessOrderCommandHandler()));

但是,当整个应用程序都是围绕 SOLID 设计的,并且应用程序变得很大时,像这样手动配置每个服务将变得繁琐且耗时。所以在这种情况下,选择一个包含批量注册功能并支持注册装饰器的 DI 框架非常有用。特别是对处理通用装饰器的支持(DiagnosticsCommandHandler<T>如上所示)将变得很重要。

例如,当您使用Simple Injector IoC 容器时,您只需两行代码即可使用装饰器注册所有命令处理程序:

// This registers all command handlers in the container.
container.RegisterManyForOpenGeneric(typeof(ICommandHandler<>),
    typeof(ICommandHandler<>).Assembly);

// This wraps all command handlers with the given decorator.
container.RegisterDecorator(typeof(ICommandHandler<>),
    typeof(DiagnosticsCommandHandlerDecorator<>));

尽管某些模式或框架对于小型应用程序来说可能是多余的,但我相信 SOLID 原则是面向对象设计的核心原则,每个应用程序的设计都应该考虑到这些原则。

于 2012-05-29T10:29:13.910 回答