c# - 容器放在哪里?

标签 c# .net asp.net-mvc inversion-of-control dryioc

我正在我的 Web 应用程序中试验 IoC,并希望根据最佳实践来做事。最近我发现了一个名为 DryIoc 的 IoC 框架,它应该是小而快的。

我已经通读了这些示例,但似乎都没有指出我应该将容器本身放在哪里。

它应该驻留在 Controller 中吗?或者在 Global.asax 中?也许在别的地方?或者作为类中的静态变量?

如果有人能够指导我正确的方向,我将不胜感激,最好是一些示例代码,因为我已经停滞不前并且不知道如何继续。

var container = new Container();   // Should obviously NOT be a local variable

container.Register<ISalesAgentRepository, SalesAgentRepository>(Reuse.Singleton);

最佳答案

通常我会做以下事情:

1 - 创建 Bootstrap 类

public static class Bootstrapper {
    public static Container _container;
    public void Bootstrap() {
        var container = new Container;
        // TODO: Register all types
        _container = container;
    }
    public static T GetInstance<T>() {
        return _container.Resolve<T>();
    }
}

2 - 在 global.asax 中调用 bootstrap 方法,在 Application_Start 方法中:

protected void Application_Start() {
    Bootstrapper.Bootstrap();
}

永远不要在任何地方直接使用容器,你必须在 MVC 生命周期的某个地方 Hook 它,通常你使用的 DI 包可以为你做这件事。

另请注意,我添加了一个 GetInstance<T> Bootstrap 类的方法。这种方法使得通过请求类型实例直接使用容器成为可能。我添加了这个方法,所以你知道这是可能的,但如果可能,请始终使用构造函数注入(inject)

关于c# - 容器放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36133763/

相关文章:

c# - 在更新 WinForms 中的控件(例如 DataGridView)时闪烁

c# - WCF 服务调用 - 仅部分参数超时?

.net - 如何在 .NET C++ 项目中对 header 进行排序

asp.net-mvc - MVC - 如何将模型从 View 传递到 Controller

c# - MVC 4 - 未找到 404 的注销 Controller 操作

c# - keybd_event() 和 SendKeys.SendWait() 有区别吗?

c# - 使用外部进程卡住UI

c# - 从父窗体 c# 访问打开窗体上的方法

c# - Hql 的计数哪里出了问题

c# 遍历 ListView 项并通过单击按钮一次在文本框中显示一行