c# – 无法使Ninject.Extensions.Conventions工作
发布时间:2020-12-16 01:57:14 所属栏目:百科 来源:网络整理
导读:我一直试图让(Ninject 3)的Ninject.Extensions.Conventions工作,没有运气.我把它归结为一个找到的样本控制台应用程序,我甚至无法做到这一点.这就是我所拥有的: class Program { static void Main(string[] args) { var kernel = new StandardKernel(); kern
我一直试图让(Ninject 3)的Ninject.Extensions.Conventions工作,没有运气.我把它归结为一个找到的样本控制台应用程序,我甚至无法做到这一点.这就是我所拥有的:
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(); } } } 我还尝试了各种组合的FromAssembliesMatching,SelectAllTypes,BindDefaultInterfaces等.一切都会引发错误激活.没有匹配的绑定可用,并且该类型不可自绑定. 只是为了理智,如果我用以下方法进行手动绑定: kernel.Bind<IConsoleOutput>().To<ConsoleOutput>(); 一切正常.很明显,我只是遗漏了一些东西. 解决方法
正如山姆所说,它是由不公开的类型造成的.它们是非公共“程序”类的内部类型.
使程序公开或添加.IncludingNonPublicTypes(): kernel.Bind(x => x .FromThisAssembly() .IncludingNonPublicTypes() .SelectAllClasses() .BindAllInterfaces()); (我已经确认这两个都有效,而你的代码却没有). 这是您的官方消息来源: 注意:在旧版本的Ninject中,此方法称为IncludeNonePublicTypes(None vs Non). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |