我有Ninject v2.2.1.4一个ASP.NET MVC 3应用程序。 一切是伟大的工作,然后突然我们开始看到Ninject尝试使用一个构造函数在参数的构造函数的参数来创建我们的DbContext。 下面是绑定:
kernel.Bind<MyContext>().ToSelf().InRequestScope();
kernel.Bind<IUnitOfWork>().ToMethod(ctx => ctx.Kernel.Get<MyContext>());
kernel.Bind<DbContext>().ToMethod(ctx => ctx.Kernel.Get<MyContext>());
所述MyContext是一个的DbContext对象实现了IUnitOfWork接口为好。 我已经将它设置这种方式使同样的情况下被注入到在单个请求中使用多个存储库。 该MyContext构造是这样的:
public MyContext() { }
public MyContext(string connectionString) { }
public MyContext (long accountID) { }
public MyContext (Connection connection) { }
有针对不同应用不同的构造,因为它们都使用相同的MyContext类。 纵观当被请求MyContext类参数的构造函数会被调用,但不管是什么原因,你会想绑定,事实并非如此。 即使被指定帐户ID与长帐户ID参数的那个叫。 这显然throwns和异常声明说:“没有符合条件的绑定是可用的,并且类型不是自绑定”它实际上抛出试图产生IUnitOfWork时除外。
如果我注释掉最后三个构造一切工作正常,无参数的构造函数使用。 如果我注释掉参数的构造函数中的任意两个也尝试使用其他,而不是无参数之一。
由Ninject提供的建议是:
Suggestions:
1) Ensure that you have defined a binding for long.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
5) If you are using automatic module loading, ensure the search path and filters are correct.
我们没有对任何1,因为我们不希望。 我不知道是什么2和5的意思。 我不认为我们已经做了3,我们不这样做4。
任何想法,为什么它不会在这种情况下使用该参数的构造函数。