2012-04-29 55 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>(); 

回答