将通用接口类型连接到不同的实现

时间:2012-04-29 23:50:54

标签: asp.net-mvc-3 c#-4.0 ninject-2

我正试图让这个工作,我找不到一个好的解决方案。我知道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 {     私有内核;

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>();