无法从Ninject.Extensions.Conventions Github页面的3.3.0版本中获得一个示例。BindDefaultInterface()工作正常,但是BindSingleInterface() (如下面所示)返回System.InvalidOperationException: 'Sequence contains no elements'的一个例外。
我知道同名的所以问题无法使Ninject.Extensions.Conventions工作。这是不一样的(而且,我的Program类是公开的,这是问题的关键)。
这是一个简单的控制台应用程序,我们可以得到我认为。
using System;
using Ninject;
using Ninject.Extensions.Conventions;
public class Program
{
static void Main(string[] args)
{
var kernel = new StandardKernel();
kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses()
.BindSingleInterface());
var output = kernel.Get<IConsoleOutput>();
output.HelloWorld();
Console.ReadKey();
}
public interface IConsoleOutput
{
void HelloWorld();
}
public class ConsoleOutput : IConsoleOutput
{
public void HelloWorld()
{
Console.WriteLine("Hello world!");
}
}
}发布于 2018-02-12 10:28:02
问题在于,Ninject也试图绑定您的Program类,而且因为它没有实现任何接口,所以您得到了System.InvalidOperationException。如果您在Program类上添加了一些虚拟接口,您的代码将毫无问题地运行。
但是,您可能应该考虑是使用像BindDefaultInterface或BindAllInterfaces这样的方法。
发布于 2018-02-12 10:28:21
问题来自这样一个事实,即Ninject捕获了您的Program类,它没有实现任何接口,并且无法将单个接口绑定到它。
您可以尝试替换该线路:
.SelectAllClasses()使用
.SelectAllClasses().Where(t => t.GetInterfaces().Any())https://stackoverflow.com/questions/48734626
复制相似问题