0

我最近参与了一个大型项目,我对 Unity 和 IOC/DI 的经验很少,我正在寻找关于在 Unity 容器中定义实例时如何创建实例的说明。

给定以下代码;

//统一配置

container.RegisterAsSingleton<IService, Service>();

//基本控制器类中的引用

private readonly IService _Service;

protected DefaultController(IService Service)
{
    _Service = Service;
}

protected string UseService(string id)
{
    return _Service.Method(id);
}

我是否需要使用类似的东西(在 MVC 解决方案中)初始化一个实例;

_Service = DependencyResolver.Current.GetService<IService>();

还是会在第一次调用 Service 方法时创建一个实例?

_Service.Method(id);

如果需要,我正在尝试找出放置此代码的最佳位置。

4

1 回答 1

1

我当然不能确定,但​​通常使用 DI 的 MVC 项目的连接方式是 DI 容器不仅用于创建 IService 实例,还用于创建依赖于 IService 的 DefaultController。

MVC 框架具有可用于提供自己的构造逻辑的扩展点,例如使用像 Unity 或 Windsor 这样的 DI 容器。如果您的项目已经使用 DI,那么它可能已经以这种方式设置。

因此,如果一切都正确连接(DI 容器创建控制器,IService 已注册到 DI 容器),则 IService 依赖项将注入 DefaultController 构造函数。您不必做任何事情,在调用控制器方法时应该已经创建了 IService。

于 2012-10-18T12:38:24.223 回答