Simpleinjctor基于泛型类型

时间:2015-12-08 23:13:56

标签: ninject inversion-of-control ioc-container simple-injector

我需要将Ninject转换为SimpleInjector实施。

我有以下代码

public T Resolve<T>()
{
    // IKernel kernel - is the global declaration
    return kernel.Get<T>();
}

我想要简单的注射器

的等价物

我试过了

public T Resolve<T>()
{
    // SimpleInjector.Container kernel - is the global declaration
    return kernel.GetInstance<T>();
}

但由于T不是类,因此抛出错误,因为它是泛型类型。

我无法将该方法强制转换为T作为类,因为它是一个接口实现。

任何建议?

1 个答案:

答案 0 :(得分:2)

在Resolve方法中添加泛型类型约束:

public T Resolve<T>() where T : class
{
    return kernel.GetInstance<T>();
}

或调用非泛型GetInstance重载:

public T Resolve<T>()
{
    return (T)kernel.GetInstance(typeof(T));
}