我正在尝试创建一个自托管多个端点的应用程序,有些会使用 WebApi 和其他一些 Wcf 。
依赖关系使用 Ninject 进行注册。我使用以下Nuget包: Ninject.Extensions.Wcf.SelfHost (对于WCF)和 Ninject.Web.WebAPi.SelfHost (对于WebAPI)。< / p>
如果我使用WCF OR WebAPI,一切正常。但是一旦我尝试使用WCF AND WebAPI来托管我的端点,我就会遇到激活异常:
控制台应用程序中发生异常。有关详细信息,请参阅stacktrace。| Ninject.ActivationException:使用HttpSelfHostConfiguration的隐式自绑定激活HttpSelfHostConfiguration时出错 几个构造函数具有相同的优先级。请使用ToConstructor语法指定构造函数或添加Inject属性。 构造函数: HttpSelfHostConfiguration(string baseAddress) HttpSelfHostConfiguration(Uri baseAddress) 激活路径: 1)请求HttpSelfHostConfiguration 建议: 1)确保实现类型具有公共构造函数。 2)如果您已实现Singleton模式,请使用与InSingletonScope()的绑定。
我理解问题是什么(两个nugets包是注册插件,其中一个有一个无法注入的构造函数),但我不知道如何解决这个问题。
作为信息,通过运行以下方法在Boostrapper类中抛出异常:
kernelInstance.Components.GetAll<INinjectHttpApplicationPlugin>()
我当前的代码( WCF 注册):
NinjectWcfConfiguration config = NinjectWcfConfiguration.Create<EmployeeService, NinjectServiceSelfHostFactory>(ConfigureService, this.GetBaseAddresses().ToArray());
NinjectSelfHostBootstrapper selfHost = new NinjectSelfHostBootstrapper(() => this.Kernel, config);
selfHost.Start();
WebAPI 注册:
HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(new Uri(BASE_ADDRESS));
config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
config.DependencyResolver = new NinjectSelfHostDependencyResolver(this.Kernel);
new NinjectWebApiSelfHost(config).Start();
任何帮助都非常感谢!