无法从ninject.extensions.conventions github页面上获得一个示例,版本3.3.0。BindDefaultInterface()
没问题,但是BindSingleInterface()
如下所示,返回System.InvalidOperationException: 'Sequence contains no elements'
的例外。
我知道标题类似的问题无法获得ninject.extensions.conventions工作。这是不一样的(而且,我的程序课是公开的,这是该问题的关键(。
我认为,这被剥夺了控制台应用程序的简单。
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!");
}
}
}
问题是,ninject还试图绑定您的Program
类,并且因为它没有实现任何接口,您获得了System.InvalidOperationException
。如果您在Program
类上添加一些虚拟接口,则您的代码将不会出现问题。
但您可能应该考虑是否使用BindDefaultInterface
或BindAllInterfaces
等方法。
问题来自于以下事实:ninject捕获了您的Program
类,该类别无法实现任何接口,并且未能将单个接口绑定到它。
您可以尝试替换该行:
.SelectAllClasses()
.SelectAllClasses().Where(t => t.GetInterfaces().Any())