在什么时候是在创建的IOC容器中定义的类的实例

时间:2012-10-18 12:06:36

标签: c# asp.net-mvc inversion-of-control unity-container

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

给出以下代码;

// 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);

如果需要,我想找出放置此代码的最佳位置。

1 个答案:

答案 0 :(得分:1)

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

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

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