我的应用程序非常简单,da DAL和BLL只是同一Windows窗体应用程序中的文件夹。
所以我有一个带有Processador
方法的Processar()
类,这个classe在构造函数中接收它的依赖项(两个存储库),检查出来。
private IFilaRepositorio _repo;
public Processador(IFilaRepositorio filaRepo)
{
_repo = filaRepo;
}
public void Processar()
{
}
我的类在Program.cs中注册,我创建了新的Form(),将新按钮拖入其中,双击以编写事件,尝试实例化我的Processador
类,它要求我提供构造函数参数。如何传递这些论点?我需要从Simple Injector容器中获取它们吗?如果是这样,如何让Simple Injector成为容器?以下是我坚持的观点。
private void button1_Click(object sender, EventArgs e)
{
Processador proc = new Processador(???); <-- Dont know how to pass the arguments
proc.Processar();
}
Simple Injector文件说:
提示:您通常应该为整个应用程序创建一个Container实例(每个应用程序域一个实例);容器实例是线程安全的。
有人能为我提供一些代码示例和/或有关良好做法的建议吗?
PS:我可以看到,我开始学习DI,IoC,SimpleInjector等等,所以,现在,我不喜欢不太高级的科目:o)
答案 0 :(得分:3)
IoC的概念是您不需要在整个应用程序中实例化对象。容器为您管理这个。因此,您不再需要使用“new”(对于由容器管理的类)。因为如果你使用'new',我们会添加一个额外的依赖,这正是我们试图用IoC避免的。
在您的情况下:您的Processador只能由容器实例化。所以你不应该在你的buttonhandler中实例化它。为此,您需要确保Processador所需的参数也由容器管理。所以例如如果Processador的签名如下:
Processador(NameFactory nameFactory, FileManager filemanager);
您需要将NameFactory和FileManager添加到容器中。
然后,您可以从容器中检索Processador的实例。例如
container.GetInstance<IProcessador>();
虽然建议通过构造函数注入或属性注入来执行此操作。
如果您希望更好地了解IoC和依赖注入,Miquel Casto可能会对此视频感兴趣:https://www.youtube.com/watch?v=e3gXWh5YBNI
Miquel Castro多年来一直在讨论DI(他也使用代码示例)。
我希望这能回答你问题的一部分。