c#mvc DI ninject存储库

时间:2012-10-24 09:47:52

标签: c# dependency-injection ninject

我正在使用.net c#Mvc,使用ninject存储库模式。我的问题是,在开发时我正在使用函数中的重用,并且每次我想从db获取更多信息并需要访问另一个表时,我需要从调用此函数的所有位置传递存储库。我做错了吗?这就是这种方式,开发连接并在函数末尾处理时,开发时间更长。

2 个答案:

答案 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传递到控制器中,并在需要时可以访问所有存储库。

相关问题