gpt4 book ai didi

c# - 哪个 DI 容器会满足这个

转载 作者:可可西里 更新时间:2023-11-01 08:33:47 24 4
gpt4 key购买 nike

这就是我想要的 DI 容器:

public class Class
{
public Class(IDependency dependency, string data) { }
}

var obj = di.Resolve<Class>(() => new Class(null, "test"));

兴趣点:

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

另一个主要要求是我希望我的组件被自动拾取,即我不想注册类 - 我希望 IoC 拾取它,因为它知道如何解决 IDependency。

此外,属性注入(inject)有时很有用,但这是可选的。

问题实际上是关于特性的组合——拥有所有特性——类型安全、参数、自动提取……检查一个特性很容易,但它们的组合不容易验证,除非熟悉特定容器并了解其功能。因此问题。

最佳答案

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

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 的实现。

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

var mc = container.Resolve<IFactory>().Create(data);

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

关于c# - 哪个 DI 容器会满足这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com