在我的代码中,我经常发现自己设置了使用基于构造函数的依赖注入并有许多依赖性的类。我最终会得到某些东西并不少见喜欢:
public class MyClass
{
private readonly IMyDependency1 _dependency1;
private readonly IMyDependency2 _dependency2;
public MyClass(IMyDependency1 dependency1, IMyDependency2 dependency2)
{
_dependency1 = dependency1;
_dependency2 = dependency2;
}
}
从功能的角度来看,这显然是必需的,但感觉就像是不必要的样板。我已经使用了其他语言中的库,例如Java,通过提供注释/属性来为您处理绑定来帮助解决此问题。我正在寻找的是在C#(最好与.NET Core兼容(中处理此操作的内容,类似的内容:
public class MyClass
{
[FromConstructor]
private readonly IMyDependency1 _dependency1;
[FromConstructor]
private readonly IMyDependency2 _dependency2;
public MyClass(IMyDependency1 dependency1, IMyDependency2 dependency2)
{
//whatever Bind() call required here
}
}
奖励点,如果注释的存在可以导致包装自动化所需的构造函数,这意味着我可以避免在所有构造函数上都在处理依赖关系绑定的情况下,完全需要编写构造函数。
是否存在类似的东西?
我不知道任何库可以提供此类功能,但是您尝试以自己的自行写作,而少量添加AOP库,名为PostSharp
。
基本想法是:将后期属性方面应用于给定的属性,获取DeclaringType
信息,并在fly上创建构造函数,然后将其发射到您的库中。您甚至可以同时为IOC容器创建绑定。这是一个问题,要应用后期类型的各个方面。
这种解决方案的弊端是PostSharp
架构数据包不是免费的,PostSharp
在编译后进行工作,因此它基本上会部分覆盖您的库,我不确定您是否可以将构造函数寄给您现有的构造函数库,或者您需要创建一个单独的图书馆。也在PostSharp
的.NET核心版本处于实验阶段。