我试图错误地使用Ninject,还是我错过了一些明显的东西?

时间:2012-08-06 21:15:36

标签: c# asp.net-mvc-3 ninject-2

我正在开发一个ASP.NET MVC Web应用程序。我想构建一个很好的数据层来抽象一切。因此,就像一个好的数据层一样,控制器不会直接与数据库通信。

现在,当然,在数据层内部,需要与数据库进行通信。我希望所有这些对象都使用相同的数据上下文(这是使用Linq2SQL,但不认为这应该很重要。)所以是的,这听起来很像一个存储库或工作模式单元。它有点像,除了我主要只是实现工作单元部分。

现在,我的问题是如何将数据上下文提供给需要它的所有类?我以为Ninject可以把它注入我需要的地方。它确实如此,如果我构建的对象在它的构造函数中只有一个参数。

所以这似乎运作良好:

public class InjectedFoo
{
     InjectedFoo(IInjectable ii) {/*stuff*/}
}

然而,这给了我编译器错误:

public class InjectedFoo
{
     InjectedFoo(Object stuff, IInjectable ii) {/*stuff*/}
}

哪,是的,非常有道理。毕竟编译器不知道Ninject将创建第二个参数。但与此同时,只有一个参数,Ninject会把它弄清楚......哪种看起来像是重点。那么我怎么能用这两个参数呢?

现在,让我们稍微提高一点:

public static class FooFactory
{
    public static MakeFoo(int fooID, IInjectable ii)
    {
    }
}

所以现在我想要一个类使用现有的数据上下文而不实际实例化。我需要传递它想要的对象的ID。所以当然我有第二个参数没有被传入的问题,所以编译器抱怨,但我甚至不能使用属性注入,因为我不能有非静态属性。 (我知道我可以使用静态属性,但我不知道它是安全的。)

所以我觉得我要么错误地使用Ninject,要么只是缺少处理这个的东西。不幸的是,所有文档和示例似乎都集中在非常简单的单参数构造函数上......

0 个答案:

没有答案