如何配置我的Unity容器以便解析依赖对象的树? 假设我们有这样的类:
public class Foo : IFoo
{
[Dependency]
public IBar Bar { get; set; }
}
public class Bar : IBar
{
[Dependency]
public IRepository Repository { get; set; }
}
public class Repository : IRepository
{
[Dependency]
public IService Service { get; set; }
}
我希望解决Foo: Container.ResolveAll();
是否可以解析无限制的嵌套依赖对象?
答案 0 :(得分:3)
构建依赖关系树(依赖关系图)是为哪些DI库构建的。
最佳做法是使用构造函数注入而不是属性注入。这也使您不必让您的课程了解您的DI库。
所以第一步是重构构造函数注入,如下所示:
public class Foo : IFoo
{
private readonly IBar bar;
public Foo (IBar bar) {
this.bar = bar;
}
}
public class Bar : IBar
{
private readonly IRepository repository;
public Bar(IRepository repository) {
this.repository = repository;
}
}
public class Repository : IRepository
{
private readonly IService service;
public Repository(IService service) {
this.service = service;
}
}
第二步是配置容器:
var container = new UnityContainer();
container.RegisterType<IFoo, Foo>();
container.RegisterType<IBar, Bar>();
container.RegisterType<IRepository, Repository>();
container.RegisterType<IService, Service>();
第三步是解决IFoo
:
IFoo foo = container.Resolve<IFoo>();
现在Unity将为您解析整个对象图。