我们有一个代表我们应用层的多个项目的解决方案。 例如当你没有对容器的引用时,是否有可能让Castle Windsor解决属性依赖问题?
域
数据
逻辑
WebUI中
我们的温莎城堡容器从我们的网络层引用然后我们通过我们的层高达级联这些依赖关系。例如...
// In Domain
public interface IFooRepository
{
void DoSomething();
}
// In Data
public class FooRepository : IFooRepository
{
public void DoSomething()
{
// Something is done
}
}
// In Logic
public class MyThingManager
{
private readonly IFooRepository fooRepository;
public MyThingManager(IFooRepository fooRepository)
{
this.fooRepository = fooRepository;
}
public void AMethod()
{
this.fooRepository.DoSomething();
}
}
// In Web
// in some controller....
var newManager = new MyThingManager(WindsorContainer.Resolve<IFooRepository>());
newManager.DoSomething();
,这很好地工作,直到我们的管理者有很多有自己的依赖关系的成员。发生这种情况时,我们最终会解决管理员依赖关系及其依赖性问题,并将其从Web层层叠起来。这个结果是一些相当大的构造函数。
是否有更优雅的方式,例如让管理器的内部组件解决它自己的依赖关系而无需访问容器?
请记住,只有web层有权访问容器(以防止循环项目依赖),所以只有web层可以激活WindsorContainer.Resolve()逻辑层不能这样才能级联的唯一方法没有容器协助的依赖是在Web层中解决它,然后使用它的接口将它传递给链。
“我们最终解决了管理者依赖关系及其依赖关系的瑕疵,并将它们从网络层级层叠起来”。我不明白这一点。当你使用构造函数注入并让容器自动在类型的构造函数中注入依赖关系时,应该没有问题。显示更多的代码可视化这个问题可能会有所帮助。 – Steven 2012-04-11 11:24:48