これを実現しようとしていますが、良い解決策を見つけることができません。私はStructureMapがこれを行うことができることを知っていますが、私はNinjectに固執しています。私が持っているもの異なる実装への一般的なインターフェイスタイプの配線
:
public interface IFormHandler<T>
{
void Handle(T form);
}
そして、私はこのような複数のクラスを実装します:
public class RegioDeleteModelFormHandler:IFormHandler<RegioDeleteModel>
{
public void Handle(RegioDeleteModel form)
{
//implement method here
}
}
またはこのいずれかを:
public class RegioUpdateModelFormHandler:IFormHandler<RegioUpdateModel>
{
public void Handle(RegioUpdateModelform)
{
//implement method here
}
}
どこかのコードでは、私はこのようなものを呼び出すことができます:
var handler = DependencyResolver.Current.GetService<IFormHandler<T>>();
正しいIFormhandlerを取得するには
これを行う方法はありますか? Ninjectがこれを行えない場合は、回避策がありますか?現在、私はNinjectのためのベースのnuGet Packageしか持っていません。関連するパッケージの1つから使用できるものはありますか?完全性期すため
は、ここに私のDependencyResolverclassです:
パブリッククラスNinjectDependencyResolver:IDependencyResolver { 民間のiKernelカーネル。事前に
public NinjectDependencyResolver() {
kernel = new StandardKernel();
AddBindings();
}
public object GetService(Type serviceType) {
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType) {
return kernel.GetAll(serviceType);
}
public IBindingToSyntax<T> Bind<T>() {
return kernel.Bind<T>();
}
public IKernel Kernel {
get { return kernel; }
}
private void AddBindings() {
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
感謝!
EDIT私の編集:たぶん私は、私は上記の、それが動作するAddBindings方法でこれをしようとしたことを追加する必要がありますが、私はすべての可能なIFormHandlersのためにそれをしなければならない場合には、多くのコードです:
Bind<IFormHandler<RegioDeleteModel>>().To<RegioDeleteModelFormHandler>();
ありがとうございました!それは動作します。 – Jeroen