C# 将已定义类型的泛型接口注册到未定义类型的泛型接口有什么区别?
在如何将实现的泛型接口注册到my中的多个类中,我遇到了一个问题,我使用这段代码解决了这个问题C# 将已定义类型的泛型接口注册到未定义类型的泛型接口有什么区别?,c#,ioc-container,C#,Ioc Container,在如何将实现的泛型接口注册到my中的多个类中,我遇到了一个问题,我使用这段代码解决了这个问题 container.RegisterType(typeof (IRepository<Location>), typeof (LocationRepository)); container.RegisterType(typeof (IRepository<ProductDto>), typeof (ProductRepository)); container.RegisterTy
container.RegisterType(typeof (IRepository<Location>), typeof (LocationRepository));
container.RegisterType(typeof (IRepository<ProductDto>), typeof (ProductRepository));
container.RegisterType(typeof (IRepository<Customer>), typeof (CustomerRepository));
container.RegisterType(typeof (IRepository<CustomerAddress>), typeof (CustomerAddressRepository));
container.RegisterType(typeof (IRepository<CustomerTerms>), typeof (CustomerTermRepository));
container.RegisterType(typeof (IRepository<AmountDto>), typeof (ProductListPricingRepository));
container.RegisterType(typeof (IRepository<Contact>), typeof (ContactRepository));
container.RegisterType(typeof(IRepository)、typeof(LocationRepository));
RegisterType(typeof(IRepository)、typeof(ProductRepository));
container.RegisterType(typeof(i存储),typeof(CustomerRepository));
RegisterType(typeof(IRepository)、typeof(CustomerAddressRepository));
RegisterType(typeof(IRepository)、typeof(CustomerTermRepository));
container.RegisterType(typeof(IRepository)、typeof(ProductListPricingRepository));
container.RegisterType(typeof(IRepository)、typeof(ContactRepository));
上面的代码按预期工作,但出于好奇,我也尝试了一些实验,并在没有定义类型的情况下注册它,如下面的代码,它似乎与第一个一样工作
container.RegisterType(typeof (IRepository<>), typeof (LocationRepository));
container.RegisterType(typeof (IRepository<>), typeof (ProductRepository));
container.RegisterType(typeof (IRepository<>), typeof (CustomerRepository));
container.RegisterType(typeof (IRepository<>), typeof (CustomerAddressRepository));
container.RegisterType(typeof (IRepository<>), typeof (CustomerTermRepository));
container.RegisterType(typeof (IRepository<>), typeof (ProductListPricingRepository));
container.RegisterType(typeof (IRepository<>), typeof (ContactRepository));
container.RegisterType(typeof(IRepository)、typeof(LocationRepository));
RegisterType(typeof(IRepository)、typeof(ProductRepository));
container.RegisterType(typeof(i存储),typeof(CustomerRepository));
RegisterType(typeof(IRepository)、typeof(CustomerAddressRepository));
RegisterType(typeof(IRepository)、typeof(CustomerTermRepository));
container.RegisterType(typeof(IRepository)、typeof(ProductListPricingRepository));
container.RegisterType(typeof(IRepository)、typeof(ContactRepository));
现在我的问题是:
第二个方法名为open generic registration。当您的具体类也是泛型的时,此方法非常有用,这样您就不需要为每个类注册类型 例如,如果您有:
interface IRepository<T>{}
interface-IRepository{}
及
类存储库:IRepository{}
在IoC中,您可以简单地写一行:
container.RegisterType(typeof (IRepository<>), typeof (Repository<>));
container.RegisterType(typeof(IRepository)、typeof(Repository));
而不是
container.RegisterType(typeof (IRepository<User>), typeof (Repository<User>));
container.RegisterType(typeof (IRepository<Product>), typeof (Repository<Product>));
container.RegisterType(typeof (IRepository<Customer>), typeof (Repository<Customer>));
container.RegisterType(typeof (IRepository<CustomerAddress>), typeof (Repository<CustomerAddress>));
// and so on
container.RegisterType(typeof(IRepository)、typeof(Repository));
RegisterType(typeof(IRepository),typeof(Repository));
RegisterType(typeof(IRepository),typeof(Repository));
RegisterType(typeof(IRepository),typeof(Repository));
//等等
如您所见,如果不打开通用注册,我们需要为每个项目分别注册“它似乎与第一个项目一样工作”这将不起作用,因为RegisterType调用将全部覆盖themselve,因此只有最后一个项目在容器中注册
container.RegisterType(typeof (IRepository<User>), typeof (Repository<User>));
container.RegisterType(typeof (IRepository<Product>), typeof (Repository<Product>));
container.RegisterType(typeof (IRepository<Customer>), typeof (Repository<Customer>));
container.RegisterType(typeof (IRepository<CustomerAddress>), typeof (Repository<CustomerAddress>));
// and so on