首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使Ninject.Extensions.Conventions工作

无法使Ninject.Extensions.Conventions工作
EN

Stack Overflow用户
提问于 2013-09-13 18:40:58
回答 1查看 2.1K关注 0票数 3

我一直试图让Ninject.Extensions.Conventions (尼尼姆3+)工作,但没有运气。我把它归结为一个找到的示例控制台应用程序,我甚至无法实现它。我现在拥有的是:

代码语言:javascript
复制
 class Program
    {
        static void Main(string[] args)
        {
            var kernel = new StandardKernel();
            kernel.Bind(x => x
               .FromThisAssembly()
               .SelectAllClasses()
               .BindAllInterfaces());

            var output = kernel.Get<IConsoleOutput>();
            output.HelloWorld();

            var service = kernel.Get<Service>();
            service.OutputToConsole();

            Console.ReadLine();
        }

        public interface IConsoleOutput
        {
            void HelloWorld();
        }

        public class ConsoleOutput : IConsoleOutput
        {
            public void HelloWorld()
            {
                Console.WriteLine("Hello world!");
            }
        }

        public class Service
        {
            private readonly IConsoleOutput _output;
            public Service(IConsoleOutput output)
            {
                _output = output;
            }

            public void OutputToConsole()
            {
                _output.HelloWorld();
            }
        }
    }

我还尝试了各种组合的FromAssembliesMatchingSelectAllTypesBindDefaultInterfaces,等。一切抛出错误激活。没有匹配的绑定可用,并且类型是不可自绑定的.

只是为了精神健康,如果我做了一个手动绑定:

代码语言:javascript
复制
kernel.Bind<IConsoleOutput>().To<ConsoleOutput>();

一切都很好。所以很明显我只是遗漏了一些东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-18 14:33:01

正如萨姆所建议的,这是由那些不公开的类型造成的。它们是非公共“计划”类的内部类型。

使程序公开或添加.IncludingNonPublicTypes()

代码语言:javascript
复制
kernel.Bind(x => x
    .FromThisAssembly()
    .IncludingNonPublicTypes()
    .SelectAllClasses()
    .BindAllInterfaces());

(我已经证实这两种方法都有效,而您的代码不起作用)。

这是您的官方来源:https://github.com/ninject/ninject.extensions.conventions/blob/master/src/Ninject.Extensions.Conventions.Test/IntegrationTests/NonPublicTypesTests.cs

注意:在Ninject的旧版本中,这种方法被称为IncludeNonePublicTypes (None vs Non)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18793095

复制
相关文章

相似问题

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