2012-04-29 20 views
0

これを実現しようとしていますが、良い解決策を見つけることができません。私は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>(); 

答えて

関連する問題