我試圖讓這個工作,我找不到一個好的解決方案。我知道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:
公共類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>();
}
}
在此先感謝!
編輯我的編輯:也許我應該補充一點,我在上面,並且它的工作AddBindings方法試過了,但是這是一個大量的代碼,如果我這樣做對所有可能的IFormHandlers:
Bind<IFormHandler<RegioDeleteModel>>().To<RegioDeleteModelFormHandler>();
謝謝!這樣可行。 – Jeroen