これを機能させようとしていますが、良い解決策が見つかりません。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 パッケージしかありません。関連パッケージのいずれかから使用できるものはありますか?
完全を期すために、これが私の DependencyResolverclass です。
public class 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 my edit : 上記の AddBindings メソッドでこれを試したことと、それが機能することを追加する必要があるかもしれませんが、可能なすべての IFormHandlers に対してそれを行う必要がある場合、それは多くのコードになります。
Bind<IFormHandler<RegioDeleteModel>>().To<RegioDeleteModelFormHandler>();