我最近参与了一个大项目,我对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);
如果需要,我想找出放置此代码的最佳位置。
答案 0 :(得分:1)
我当然无法确定,但通常使用DI的MVC项目的连线方式是DI容器不仅用于创建IService实例,还用于依赖IService的DefaultController。
MVC框架具有扩展点,您可以使用它们来提供自己的构造逻辑,例如使用像Unity或Windsor这样的DI容器。如果您的项目已经使用DI,则可能已经设置了这种方式。
因此,如果所有内容都正确连接(DI容器创建控制器,IService注册到DI容器),IService依赖项将注入DefaultController构造函数。你不应该做任何事情,在调用控制器方法时应该已经创建了IService。