哪个DI容器会满足这个要求

这是我想要的DI容器:

public class Class { public Class(IDependency dependency, string data) { } } var obj = di.Resolve(() => new Class(null, "test")); 

兴趣点:

  1. 可以在构造函数中解析依赖项和数据。
  2. 可以使用类型安全语法来传递构造函数参数(确切的语法可能会有所不同)。 是的我可以通过从(Expression.Body作为NewExpression)获取构造函数参数来自己完成 – 但我需要一种方法来检测容器中注册的参数。

另一个主要要求是我希望自动拾取我的组件,即我不想注册Class – 我希望IoC能够选择它,因为它知道如何解决IDependency。

此外,Property Injection有时也很有用,但这是可选的。

问题实际上是关于function的组合 – 拥有所有function – 类型安全,参数,自动拾取……很容易检查一个function,但除非一个人熟悉,否则它们的组合不容易validation特定容器并了解其function。 这样的问题。

我认为通过定义一个可以创建你的类的抽象工厂会更好。

 public interface IFactory { MyClass Create(string data); } 

然后,您可以像这样创建一个IFactory的实现:

 public class MyFactory : IFactory { private IDependency dependency; public MyFactory(IDependency dependency) { if (dependency == null) { throw new ArgumentNullException("dependency"); } this.dependency = dependency; } #region IFactory Members public MyClass Create(string data) { return new MyClass(this.dependency, data); } #endregion } 

在容器中,您将注册MyFactory和IDependency的实现。

您现在可以使用容器来解析Factory,并使用Factory来获取类:

 var mc = container.Resolve().Create(data); 

这种方法是完全类型安全的,可以很好地将依赖项与运行时应用程序数据分离。