将DIY依赖注入与面向方面编程相结合

时间:2014-10-09 08:53:22

标签: c# dependency-injection aop rapier-loom

对于即将推出的项目,我计划使用依赖注入和面向方面编程。我将自己实现前者,遵循DIY dependency injection guide并使用LOOM.Net作为AOP部分。

创建交织类型的逻辑类和方面类的常见模式是

AspectClass aspect = new AspectClass();
LogicClass logic = Weaver.Create<LogicClass>(aspect);

我的直觉是在胶水代码中进行交织,例如对于实现ConcreteLogicA的类ILogicA,这取决于ILogicB实现的ConcreteLogicB

class MyInjector
{
    ...
    public ILogicA GetLogicA(AspectClass aspectToInterweave)
    {
        return Weaver.Create<ConcreteLogicA>(aspectToInterweave, GetLogicB(aspectToInterweave));
    }

    public ILogicB GetLogicB(AspectClass aspectToInterweave)
    {
        return Weaver.Create<ConcreteLogicB>(aspectToInterweave);
    }
    ...
}

这是一个可行的解决方案还是偏离轨道。优点是,我不必将我的逻辑与我的方面混合在一起(这无疑是AOP的线索),但这样我就为胶水代码添加了更多的逻辑。

1 个答案:

答案 0 :(得分:4)

由于您正在开始一个新项目,我建议您更仔细地研究SOLID软件设计原则并尝试将它们应用到您的新项目中。当您使用正确的抽象设计应用程序并符合SOLID原则时,几乎没有理由使用代码编织工具,如LOOM和PostSharp。如果您已经处于不幸的位置,那么这些工具特别有价值,您可以轻松更改遗留代码库。

不要使用代码编织,而是让您的应用程序设计引导您。当您使用正确的抽象设计应用程序时,使用装饰器添加横切关注点很容易。您可以找到使用适当的抽象herehere设计的系统示例。

这些文章描述了如何使用装饰器定义横切关注点。以这种方式设计系统时,可以与其余代码分开测试跨领域问题的实现。使用代码编织工具时更难的东西。使用正确的抽象时,这很容易。

在过去的几年里,我咨询了几家公司,在那里我教会开发人员如何正确应用设计模式,同时提高灵活性和可维护性。他们遗留的代码库很难实现,但您似乎处于一个幸运的位置,即您开始一个新项目。

以此为契机,提高您的设计技能,让您的应用程序在未来几年内保持可维护性。