2012-04-29 75 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包。有什麼我可以使用一個相關的軟件包嗎?

爲了完整起見,這裏是我的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>(); 

回答