使用Autofac创建组件后自动设置属性
这是示例代码:
public interface IService<TEntity> {
IContext Context { get; set; }
//unimportant methods
bool Validate(TEntity entity);
void Add(TEntity enttity);
}
public class UsersController : Controller {
private IService<User> _service;
public MyController(IService<User> service){
_service = service;
_service.Context = ControllerContext;
}
}
我正在使用AutofacControllerFactory在我的ASP.NET MVC应用程序中创建控制器。
是否有可能在每个控制器的构造函数中消除这行代码:
_service.Context = ControllerContext;
换句话说:是否可以使用ControllerContext自动设置此属性?
它应该是可能的,因为每个IService实现都有一个可设置的IContext属性。
我应该扩展AutofacControllerFactory还是有一种标准的doint方式?
没有找到相关结果
已邀请:
1 个回复
扦帽次杏
取决于
取决于
取决于
没有DI容器可以进入你的班级内部并控制那里发生的事情。他们可以为您设置依赖关系,并从外部将它们注入到您的类中。但是,它们不能很好地处理循环依赖,因此更好的选择是重新设计API。 从这里看起来非常像
的Context属性是Leaky Abstraction。服务不应该知道运行它的UI框架的任何信息。 您通常可以通过将其中一个使用者更改为更加事件驱动的体系结构来打破循环依赖关系。 这是一篇关于这类问题的文章。 以下是与您的MVC问题相似的相关答案:在ASP.NET MVC ContactsManager教程中是否有一种解决依赖注入循环问题的良好/正确方法? 另请参阅答案:依赖注入以解决循环依赖关系