gpt4 book ai didi

c# - 使用 Autofac 创建具有依赖关系的类的实例

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

问题:

假设类:

public class MyAwesomeClass
{
private IDependCls _dependCls;
public MyAwesomeClass(IDependCls dependCls)
{
_dependCls = dependCls;
}

}

在其他地方我需要得到那个类的一个实例,像这样:

public class SomewhereElse
{
public void AwesomeMethod()
{
//...
// AwesomeStuff
//...

var GetErDone = new MyAwesomeClass(); // PROBLEM! No constructor with 0 arguements
}
}

问题是,我会吗

建议的解决方案一:

A) 必须制作一个额外的构造函数来解决依赖关系?例如:

   public MyAwesomeClass() // new constructor
{
_dependCls = DependencyResolver.Current.GetService<IDependCls>();
}


public class SomewhereElse
{
public void AwesomeMethod()
{
var GetErDone = new MyAwesomeClass(); // IT WORKS!!
}
}

建议方案二:

B) 在 var GetErDone 之前使用 AwesomeMethod 中的解析器

public class SomewhereElse
{
public void AwesomeMethod()
{
var depCls = _dependCls = DependencyResolver.Current.GetService<IDependCls>();
var GetErDone = new MyAwesomeClass(depCls); // IT WORKS!!
}
}

Autofac 解决方案?

C) 其他一些 Autofac 方式?

寻找最佳实践,并在可能的情况下寻找良好的 Autofac 解决方案。我认为第一种方法是最糟糕的,因为可选的依赖项可能会导致很多困惑。

总结:

MyAwesomeClass 具有依赖项时,如何获得 new MyAwesomeClass()

最佳答案

看看 Composition Root模式。

你是对的,提高依赖性解决方案只会将问题转移到另一个地方。但是,如果您继续在对象图中向上移动它,您将到达应用程序的入口点。您将在那里构建您的对象图。

将其与 Service Locator anti-pattern 进行比较(在您的情况下,在客户端类中使用 DependencyResolver),您会发现 Composition Root 是一个更好的解决方案。

关于c# - 使用 Autofac 创建具有依赖关系的类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799333/

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