c# - 是否有使用属性将注入(inject)参数绑定(bind)到成员字段的包?

标签 c# .net .net-core

在我的代码中,我经常发现自己设置类,这些类利用基于构造函数的依赖注入(inject),并且有许多依赖项进来。我经常遇到类似这样的事情:

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

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

虽然从功能的角度来看这显然是必要的,但感觉就像是不必要的样板文件。我使用过其他语言(例如 Java)的库,它们通过提供注释/属性来为您处理绑定(bind)来帮助解决这个问题。我正在寻找的是在 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
    }
}

如果注释的存在可以导致包自动生成所需的构造函数,这意味着我可以避免在所有构造函数都在处理依赖绑定(bind)的情况下完全不需要编写构造函数。

有这样的东西吗?

最佳答案

我不知道有哪个库可以开箱即用地提供这种功能,但是您可以尝试自己编写一个,添加少量名为 PostSharp 的 AOP 库。 .

基本思路是这样的:apply an PostSharp attribute aspect to a given properties ,获取DeclaringType信息,create a constructor在飞行中并将其发送到您的图书馆。您甚至可以同时为您的 IoC 容器创建绑定(bind)。这是一个关于应用 aspects on types in PostSharp 的问题.

这种解决方案的缺点是 PostSharp 架构数据包 isn't free , PostSharp 在编译后工作,所以它基本上部分覆盖了你的库,我不确定你是否能够向现有库发出构造函数,或者你需要创建一个单独的库。 PostSharp 的 .Net Core 版本也是 in experimental phase .

关于c# - 是否有使用属性将注入(inject)参数绑定(bind)到成员字段的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44312052/

相关文章:

c# - 将项目列表转换为树的通用方法

c# - 将字符串加密为固定长度

c# - LINQ to Entities 无法识别该方法

unit-testing - VSTS : dotnet with Docker fail to publish tests

c# - 如何将具有不同名称但具有相同属性集的 xml 元素反序列化为类型化数组/集合

c# - Excel 自动化,如何检测用户是否在 Excel 工作表中运行宏或单击 'Run Macro' CommandBarControl?

c# - 从用 C++ 编写的桌面应用程序过渡到基于 Web 的应用程序

c# - 如何在.Net Core中设置EntryAssembly进行测试

c# - Ubuntu终端上的.NET Core参数十进制错误

c# - ASP.NET 中的 SendAsync(异步电子邮件)和事件处理程序/生命周期?