У меня есть приложение MVC3, которое должно предоставлять некоторые функции через WCF. Некоторые из этих функций имеют зависимости, и я хотел бы внедрить их с помощью Ninject, но я должен упустить что-то очевидное, поскольку это не работает. Кто-нибудь может дать подсказку? Вот что я сделал:
1) в моем приложении MVC3 я добавляю Ninject Wcf extensions через nuget.
2) Я добавляю .svc файл вроде:
<%@ ServiceHost Service="MyWeb.LookupService"
Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"%>
3) Я добавляю соответствующий код как (это просто тест, поэтому я использую фиктивный интерфейс прямо здесь):
[ServiceContract]
public interface ILookupService
{
[OperationContract]
int GetProjectIdByCode(string sCode);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class LookupService : ILookupService
{
private readonly ISomeRepository _repository;
public LookupService(ISomeRepository repository)
{
_repository = repository;
}
public int GetProjectIdByCode(string sCode)
{
//... use _repository
}
}
4) в App_Start / NinjectMVC3.cs :
private static void RegisterServices(IKernel kernel)
{
string sConnection = ConfigurationManager.ConnectionStrings["SomeEntities"].ConnectionString;
// WCF
kernel.Bind<ServiceHost>().To<NinjectServiceHost>();
kernel.Bind<ISomeRepository>()
.To<AConcreteRepository>()
.WithConstructorArgument("sConnection", sConnection);
}
Теперь, когда я получаю доступ к svc, я получаю следующее исключение из Ninject:
System.ArgumentNullException не обрабатывается кодом пользователя
Сообщение = не может быть пустым Имя параметра: root Источник = Ninject
ParamName = root StackTrace:
в Ninject.Infrastructure.Ensure.ArgumentNotNull (аргумент объекта, имя строки) в
C: \ Projects \ Ninject \ Maintenance2.2 \ Ninject \ SRC \ Ninject \ Инфраструктура \ Ensure.cs: линия
20
в Ninject.ResolutionExtensions.GetResolutionIterator (IResolutionRoot
root, тип сервиса, Func 2 constraint, IEnumerable
1 параметры,
Boolean isOptional, Boolean isUnique) в
C: \ Projects \ Ninject \ Maintenance2.2 \ Ninject \ SRC \ Ninject \ Синтаксис \ ResolutionExtensions.cs: строка
258
в Ninject.ResolutionExtensions.Get [T] (корень IResolutionRoot, параметры IParameter []) в
C: \ Projects \ Ninject \ Maintenance2.2 \ Ninject \ SRC \ Ninject \ Синтаксис \ ResolutionExtensions.cs: строка
37
в Ninject.Extensions.Wcf.NinjectServiceHostFactory.CreateServiceHost (Тип
serviceType, Uri [] baseAddresses) в
C: \ Projects \ Ninject \ Maintenance2.2 \ ninject.extensions.wcf \ SRC \ Ninject.Extensions.Wcf \ NinjectServiceHostFactory.cs: линия
48
в System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost (String
constructorString, Uri [] baseAddresses)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService (String
normalizedVirtualPath)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService (String
normalizedVirtualPath)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable (String
normalizedVirtualPath)