【发布时间】:2012-11-07 22:05:58
【问题描述】:
我有一个具有典型架构的 MVC 应用程序...
ASP.NET MVC 控制器 -> 人员服务 -> 人员存储库 -> 实体框架数据库上下文
我正在使用 Castle Windsor,我可以看到将它与 ControllerFactory 一起使用来创建具有正确依赖关系的控制器的好处。使用这种方法,Controller 会获得一个 Service 注入,而后者又知道如何构造正确的 Repository,而 Repository 又知道要使用的正确 DbContext。
windsor 配置是这样的...
dicontainer = new WindsorContainer();
dicontainer.Register(Component.For<IPersonService>().ImplementedBy<PersonService>());
dicontainer.Register(
Component.For<IPersonRepository>().UsingFactoryMethod(
() => new PersonRepository(new HrContext("connectionString"))));
这是正确的做法吗?我不喜欢UsingFactoryMethod,但是想不出别的办法。
另外,如果存储库需要服务层不需要的依赖项(比如 ILogger)怎么办?这是否意味着我必须将 ILogger 传递到服务层而不使用它。这似乎是一个糟糕的设计。我会很感激这里的一些指示。我已经阅读了大量文章,但没有找到一个具体的例子来验证我是否做对了。谢谢。
【问题讨论】:
标签: asp.net-mvc dependency-injection castle-windsor