c# - 在哪里以及如何获得 Simple Injector 容器?

标签 c# dependency-injection inversion-of-control simple-injector

我的应用程序非常简单,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/

相关文章:

c# - WPF 数据绑定(bind)堆栈面板

entity-framework - 如何在 ServiceStack Core 中注册 DbContext EF Core?

c# - .net 的控制反转

android - 跨 Gradle 模块使用 Dagger Multibinding

java - 一个普通的 servlet 可以被配置为一个 seam 组件吗?

dependency-injection - 国际奥委会问题 : Too many Abstract Factories for Runtime data dependent classes

c# - WPF 隐藏滑轨

c# - visual studio 2017 RC 中的 NuGet 控制台不会添加迁移或更新数据库?

c# - 有符号整数溢出行为

java 如何检查CDI是否启用?