哪个DI容器会满足这个要求
这是我想要的DI容器:
public class Class { public Class(IDependency dependency, string data) { } } var obj = di.Resolve(() => new Class(null, "test"));
兴趣点:
- 可以在构造函数中解析依赖项和数据。
- 可以使用类型安全语法来传递构造函数参数(确切的语法可能会有所不同)。 是的我可以通过从(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);
这种方法是完全类型安全的,可以很好地将依赖项与运行时应用程序数据分离。