首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ninject.Extensions.Conventions不会绑定单个接口

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

Stack Overflow用户
提问于 2018-02-11 17:58:58
回答 2查看 251关注 0票数 0

无法从Ninject.Extensions.Conventions Github页面的3.3.0版本中获得一个示例。BindDefaultInterface()工作正常,但是BindSingleInterface() (如下面所示)返回System.InvalidOperationException: 'Sequence contains no elements'的一个例外。

我知道同名的所以问题无法使Ninject.Extensions.Conventions工作。这是不一样的(而且,我的Program类是公开的,这是问题的关键)。

这是一个简单的控制台应用程序,我们可以得到我认为。

代码语言:javascript
复制
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!");
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-12 10:28:02

问题在于,Ninject也试图绑定您的Program类,而且因为它没有实现任何接口,所以您得到了System.InvalidOperationException。如果您在Program类上添加了一些虚拟接口,您的代码将毫无问题地运行。

但是,您可能应该考虑是使用像BindDefaultInterfaceBindAllInterfaces这样的方法。

票数 1
EN

Stack Overflow用户

发布于 2018-02-12 10:28:21

问题来自这样一个事实,即Ninject捕获了您的Program类,它没有实现任何接口,并且无法将单个接口绑定到它。

您可以尝试替换该线路:

代码语言:javascript
复制
.SelectAllClasses()

使用

代码语言:javascript
复制
 .SelectAllClasses().Where(t => t.GetInterfaces().Any())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48734626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档