我有这样一个服务的通用接口:
public interface IProductService<T> where T:Product
{
Task<T> LoadProduct(int productID, int cateogryId, string key);
}
默认实现是
public class ProductService<T>: IProductService<T> where T:Product
{ ... }
我想使用Ninject(可能还有Ninject.Extensions.Factory)在运行时实例化服务,如下所示:
ProductService<Toy> productService = productServiceFactory.CreateProductService("Toy");
其中nameOfProductClass将是从Product基类派生的实际产品类(换句话说,T)。我无法弄清楚如何做到这一点。我可以轻松地创建这样的服务:
var productService = productServiceFactory.CreateProductService<Toy>();
玩具来自产品。如果您注意到,这需要我在调用之前将产品类型实际放入代码中。我不希望这样,我想将类型名称作为参数传递。