重複の可能性:
MVC3 + Ninject - 方法は?
小さな mvc 4 プロジェクトで、ninject を使用して依存性注入を実装しようとしています。
これまでのところ、APIコントローラーで動作していますが、通常のコントローラーではうまくいきません。
私はNinjectResolverを持っています:
public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectDependencyResolver(IKernel kernel)
: base(kernel)
{
_kernel = kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectDependencyScope(_kernel.BeginBlock());
}
public override void Dispose()
{
_kernel.Dispose();
}
}
そして NinjectScope:
public class NinjectDependencyScope : IDependencyScope
{
protected IResolutionRoot ResolutionRoot;
public NinjectDependencyScope(IResolutionRoot kernel)
{
ResolutionRoot = kernel;
}
public object GetService(Type serviceType)
{
var request = ResolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
return ResolutionRoot.Resolve(request).SingleOrDefault();
}
public IEnumerable<object> GetServices(Type serviceType)
{
var request = ResolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
return ResolutionRoot.Resolve(request).ToList();
}
public void Dispose()
{
var disposable = (IDisposable)ResolutionRoot;
if (disposable != null) disposable.Dispose();
ResolutionRoot = null;
}
}
次に、Global.asax で設定します。
var kernel = new StandardKernel();
kernel.Bind(typeof(IRepository)).To(typeof(Repository));
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
次に、リポジトリを次のように API コントローラーに挿入します。
private IRepository _repository;
public TestApiController(IRepository repository)
{
_repository = repository;
}
これは正常に機能しますが、通常のコントローラーで同じことを行うと、「このオブジェクトに対してパラメーターなしのコンストラクターが定義されていません」というエラーが発生して失敗します。
何か案は?