WCF を介していくつかの機能を公開する必要がある MVC3 アプリケーションがあります。これらの関数の一部には依存関係があり、Ninject を使用してそれらを注入したいのですが、これが機能しないため、ここで明らかな何かが欠けているに違いありません。誰でもヒントを与えることができますか?これが私がしたことです:
1) MVC3 アプリで、ナゲット経由でNinject Wcf 拡張機能を追加します。
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 はユーザー コードによって処理されませんでした
Message=Cannot be null パラメータ名: ルート ソース=Ninject
ParamName=ルート2\ninject\src\Ninject\Infrastructure\Ensure.cs: 20 行目 Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root、Type service、Func2 constraint, IEnumerable
1 つのパラメーター、Boolean isOptional、Boolean isUnique) の c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:Ninject.ResolutionExtensions.Get[T](IResolutionRoot ルート、IParameter[ ] parameters) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:line 37 at Ninject.Extensions.Wcf.NinjectServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses) in c :\Projects\Ninject\Maintenance2.2\ninject.extensions.wcf\src\Ninject.Extensions.Wcf\NinjectServiceHostFactory.cs:System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) の 48 行目System.ServiceModel.ServiceHostingEnvironment.HostingManager.System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath) で CreateService(String normalizedVirtualPath) System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) で