我有一个应用程序,我不知道控制器可能需要的完整存储库列表(在构建控制器时)。控制器从数据库中获取要呈现的“组件”列表,然后需要哪些其他存储库取决于数据库返回的“组件”。有没有办法注入这些存储库?我正在使用ninject,虽然它可能没关系。
答案 0 :(得分:1)
使您的存储库成为组件中的依赖项。大多数IOC软件(如Ninject)会在解析对象时为其注入所有必需的依赖项。
例如:
public class ComponentA : IComponent
{
public IRepository RepositoryA {get;set;}
}
public class ComponentB : IComponent
{
public IRepository RepositoryAnother {get;set;}
}
每当你加载ComponentA或B时,它的依赖项(在这种情况下是一个IRepository)也应该被加载。
所以你不需要知道需要什么样的存储库。
答案 1 :(得分:0)
在我写我的问题时,我的“组件”被实现为部分视图,我从一个控制器动作执行的视图(Html.Partial)中渲染它们。感谢this question and answer我更改了这个模型,以便我的每个“组件”都拥有自己的控制器,而不是直接渲染局部视图,从视图中调用在这些控制器上标记为ChildActionOnly
的操作(Html 。行动)。这与article linked in the original answer中描述的类似,尽管在我的例子中视图引擎是剃刀。
这样整个问题就不再存在了 - 每个组件控制器现在都知道它的存储库。