我正在使用.net c#Mvc,使用ninject存储库模式。我的问题是,在开发时我正在使用函数中的重用,并且每次我想从db获取更多信息并需要访问另一个表时,我需要从调用此函数的所有位置传递存储库。我做错了吗?这就是这种方式,开发连接并在函数末尾处理时,开发时间更长。
答案 0 :(得分:2)
如果你的班级需要传递大量的存储库,这有时可能表明你的班级做了太多事情,可能违反了单一责任原则。 也许如果你把这个班级分成更小的更专业的班级,问题也不会那么糟糕。
另一方面,有时传递大量存储库是不可避免的。您可能会考虑创建一个工厂类来为您创建遭受“构造函数阻塞”的类 - 这应该可以保存一些类型,因为大量的构造函数初始化只在一个地方(在工厂类中)。
编辑:一个非常简单的“工厂”类可能如下:
public class FactoryClass
{
public ClassWithLotsOfRepositories GetClassWithLotsOfRepositories()
{
return new ClassWithLotsOfRepositories(new repository1(),
new repository2(), new repository3() );
}
}
因此,您现在可以创建ClassWithLotsOfRepositories的实例,而无需每次都在构造函数中指定存储库。
ClassWithLotsOfRepositories myClassThatUsesLotsOfRepositories = new FactoryClass().GetClassWithLotsOfRepositories();
我的例子中有通过构造函数传入的具体类。您正在使用Ninject,因此可能有需要解析的接口 - 我只是简单地说明这个概念。
答案 1 :(得分:0)
使用工作单元更新所有存储库。这样,您就可以将uow传递到控制器中,并在需要时可以访问所有存储库。