在我的代码中,我经常发现自己设置类,这些类利用基于构造函数的依赖注入(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/