【问题标题】:wiring generic interface type to different implementations将通用接口类型连接到不同的实现
【发布时间】:2012-04-29 23:50:53
【问题描述】:

我正在努力解决这个问题,但找不到好的解决方案。我知道 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 包。有什么我可以从相关软件包中使用的东西吗?

为了完整起见,这是我的 DependencyResolver 类:

公共类 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>();

【问题讨论】:

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


    【解决方案1】:
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多