是否有使用属性将注入参数绑定到成员字段的包?

时间:2017-06-01 15:47:46

标签: c# .net .net-core

在我的代码中,我经常发现自己正在设置使用基于构造函数的依赖注入的类,并且有许多依赖项。我最终得到类似的东西并不罕见:

public class MyClass
{
    private readonly IMyDependency1 _dependency1;
    private readonly IMyDependency2 _dependency2;

    public MyClass(IMyDependency1 dependency1, IMyDependency2 dependency2)
    {
        _dependency1 = dependency1;
        _dependency2 = dependency2;
    }
}

从功能的角度来看,这显然是必要的,感觉就像不必要的样板。我已经在其他语言中使用了库,例如Java,它通过提供注释/属性来帮助处理绑定。我正在寻找的是用C#处理这个问题(最好与.net核心兼容),如下所示:

public class MyClass
{
    [FromConstructor]
    private readonly IMyDependency1 _dependency1;

    [FromConstructor]
    private readonly IMyDependency2 _dependency2;

    public MyClass(IMyDependency1 dependency1, IMyDependency2 dependency2)
    {
        //whatever Bind() call required here
    }
}

如果注释的存在可以导致包自动生成所需的构造函数,则表示我可以避免在所有构造函数正在执行的情况下都需要编写构造函数来处理依赖项绑定。

这样的事情是否存在?

1 个答案:

答案 0 :(得分:0)

我不知道任何提供开箱即用功能的库,但您尝试自己编写一个,只需添加少量名为PostSharp的AOP库。

基本理念是:apply an PostSharp attribute aspect to a given properties,获取DeclaringType信息,然后create a constructor即可将其发送到您的图书馆。您甚至可以同时为IoC容器创建绑定。以下是有关应用aspects on types in PostSharp的问题。

此类解决方案的缺点是PostSharp架构数据包isn't freePostSharp在编译后执行此操作,因此它基本上会部分覆盖您的库,而我&# 39;我不确定您是否能够将构造函数发送到现有库,或者您需要创建一个单独的库。此外,PostSharp的.Net核心版本为in experimental phase