Я уже давно использую Ninject с проектами Asp.Net MVC и работал как шарм. Но теперь, когда я хочу использовать то же самое с библиотекой услуг WCF, установив Ninject.Extensions.Wcf
и Ninject.Web.Common
вместо Ninject.MVC3
, я получаю ниже ошибку при добавлении ссылки на службу.Ninject зависимость для ошибки wcf
System.InvalidOperationException: The service type provided could not be loaded as a service because it does not have a default (parameter-less) constructor. To fix the problem, add a default constructor to the type, or pass an instance of the type to the host.
at System.ServiceModel.Dispatcher.InstanceBehavior..ctor(DispatchRuntime dispatch, ImmutableDispatchRuntime immutableRuntime)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime..ctor(DispatchRuntime dispatch)
at System.ServiceModel.Dispatcher.DispatchRuntime.GetRuntimeCore()
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpened()
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)
Это мой WCF конструктор класса -
private TestDBContext _dbContext;
public TestService(TestDBContext ctx)
{
_dbContext = ctx;
}
А вот как я добавить зависимость в NinjectWebCommon -
kernel.Bind<TestDBContext>().To<TestDBContext>().InRequestScope();
Что еще требуется здесь? Как это исправить?
Благодаря
Редактировать: Весь NinjectWebCommon
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<TestDBContext>().To<TestDBContext>().InRequestScope();
}
App.config
https://gist.github.com/anonymous/ad0da985773c145f2b30
Это выглядит довольно прямо вперед, но Тереза до сих пор не описание того, как служба WCF загрузился, как с * SVC-файл и/или web.config. –
Это библиотека wcf, поэтому не содержит .svc. Он загружается с помощью App.config. Сообщите мне, какая часть этого требуется для вашей отладки. – Sam
Хорошо. Не могли бы вы добавить сюда app.config? Я думаю, что это проблема с фабрикой. –