我正在阅读有关依赖注入的文章http://www.asp.net/web-api/overview/advanced/dependency-injection
它显示了Microsoft的Unity容器。
有些事情对我来说没有意义
例如,在
行之后 public ProductsController(IProductRepository repository)
以上是Controller的构造函数。我需要知道谁将repository
传递给构造函数?通过向Unity注册IProductRepository接口,可以实现这一点吗?
public static void Register(HttpConfiguration config)
{
var container = new UnityContainer();
container.RegisterType<IProductRepository, ProductRepository>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
// Other Web API configuration not shown.
}
上面的代码是否都需要让MVC将对象传递给控制器的构造函数?
答案 0 :(得分:3)
你回答了自己的问题:
是通过向Unity注册IProductRepository接口来实现的吗?
是
当您请求使用Unity解析类型时,容器会搜索公共构造函数。如果构造函数需要一些实现(在您的情况下为IProductRepository
),则容器在其注册中搜索所有所需参数的实现。如果找到,它会解决这个问题。这是一个递归过程。
是的。您需要使用容器注册IProductRepository
的实现,以便使用该容器解析Controller的实例。