Ninject.Extensions.Conventions 不会绑定单个接口



无法从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类上添加一些虚拟接口,则您的代码将不会出现问题。

但您可能应该考虑是否使用BindDefaultInterfaceBindAllInterfaces等方法。

问题来自于以下事实:ninject捕获了您的Program类,该类别无法实现任何接口,并且未能将单个接口绑定到它。

您可以尝试替换该行:

.SelectAllClasses()

 .SelectAllClasses().Where(t => t.GetInterfaces().Any())

最新更新