加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将定义类型的通用接口注册到没有类型的通用接口有什么区别

发布时间:2020-12-15 22:17:26 所属栏目:百科 来源:网络整理
导读:我有一个问题,如何在我的 UnityContainer中注册我的通用接口实现到多个类,我用这个代码想出来了. container.RegisterType(typeof (IRepositoryLocation),typeof (LocationRepository));container.RegisterType(typeof (IRepositoryProductDto),typeof (Produ
我有一个问题,如何在我的 UnityContainer中注册我的通用接口实现到多个类,我用这个代码想出来了.

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

现在我的问题是:

>除了代码的可读性之外,两者之间有什么区别?
>如果我选择其中一个,他们有任何暗示吗?
>如果我有这个代码,最佳做法是什么?

解决方法

第二种方法名为开放通用注册.当您的具体类也是通用的时,此方法很有用,因此您不需要为每个类注册一个类型.

例如,如果你有:

interface IRepository<T>{}

class Repository<T>:IRepository<T>{}

只需在IoC中你就可以编写一个简单的行:

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

如您所见,如果没有开放式通用注册,我们需要为每个项目单独注册

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读