我的应用程序非常简单,da DAL 和 BLL 只是同一个 Windows 窗体应用程序中的文件夹。
所以我有一个带有 Processar()
方法的 Processador
类,这个类在构造函数中接收它的依赖项(两个存储库),检查一下。
private IFilaRepositorio _repo;
public Processador(IFilaRepositorio filaRepo)
{
_repo = filaRepo;
}
public void Processar()
{
}
我的类在 Program.cs 中注册,我创建了新的 Form(),将新按钮拖入其中,双击以编程事件,尝试实例化我的 Processador
类,它询问我对于构造函数参数。如何传递这些参数?我需要从 Simple Injector 容器中获取它们吗?如果是这样,如何获得容器的简单注入(inject)器?这是我坚持的观点。
private void button1_Click(object sender, EventArgs e)
{
Processador proc = new Processador(???); <-- Dont know how to pass the arguments
proc.Processar();
}
Simple Injector 文档说:
Tip: You should typically create a single Container instance for the whole application (one instance per app domain); Container instances are thread-safe.
有人可以为我提供一些代码示例和/或有关良好做法的建议吗?
PS:正如我所见,我开始学习 DI、IoC、SimpleInjector 等,所以,目前,我不喜欢太高级的科目:o)
最佳答案
IoC 的概念是您不再需要在整个应用程序中实例化对象。容器为您管理这个。因此您不需要再使用“new”(对于由容器管理的类)。因为如果您使用“new”,我们会添加一个额外的依赖项,而这正是我们在 IoC 中试图避免的。
在您的情况下:您的 Processador 应该只由容器实例化。所以你不应该在你的按钮处理程序中实例化它。为此,您需要确保 Processador 所需的参数也由容器管理。所以例如如果 Processador 的签名是这样的:
Processador(NameFactory nameFactory, FileManager filemanager);
容器中需要添加NameFactory和FileManager。
然后您可以从容器中检索 Processador 的实例。例如
container.GetInstance<IProcessador>();
虽然建议通过构造函数注入(inject)或属性注入(inject)来做到这一点。
如果您想更好地了解 IoC 和依赖注入(inject),您可能会对 Miquel Casto 的这段视频感兴趣:https://www.youtube.com/watch?v=e3gXWh5YBNI
多年来,Miquel Castro 一直在举办有关 DI 的 session (他也使用代码示例)。
我希望这能回答您的部分问题。
关于c# - 在哪里以及如何获得 Simple Injector 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44478431/