UnityContainer中RegisterType与RegisterInstance的区别

应用中同时使用到这两种注册方式,以下是自己的理解

 

RegisterInstance注册单例模式

1             _container.RegisterInstance<INavigationService>(NavigationService);
2             _container.RegisterInstance<ISessionStateService>(SessionStateService);
3             _container.RegisterInstance<IEventAggregator>(EventAggregator);
4             _container.RegisterInstance<IResourceLoader>(new ResourceLoaderAdapter(new ResourceLoader()));         

注册的为已经实例化的对象,每次调用Resolve取出注册对象均为唯一单例

RegisterType注册类型

1             _container.RegisterType<IProductCatalogRepository, ProductCatalogRepository>();
2             _container.RegisterType<IShoppingCartRepository, ShoppingCartRepository>();
3             _container.RegisterType<ICheckoutDataRepository, CheckoutDataRepository>();
4             _container.RegisterType<IOrderRepository, OrderRepository>();    

仅会在调用Resolve时,实例化注册对象,多次调用,重复实例化多个对象

可添加类型ContainerControlledLifetimeManager 也注册为单例

复制代码

1             _container.RegisterType<IProductCatalogService, ProductCatalogServiceProxy>(new ContainerControlledLifetimeManager());
2             _container.RegisterType<IOrderService, OrderServiceProxy>(new ContainerControlledLifetimeManager());
3             _container.RegisterType<IShoppingCartService, ShoppingCartServiceProxy>(new ContainerControlledLifetimeManager());    

复制代码

 

1

            _container.RegisterType<IProductCatalogRepository, ProductCatalogRepository>(new ContainerControlledLifetimeManager());

2

            _container.RegisterInstance<IProductCatalogRepository>(new ProductCatalogRepository()); 

1与2的不同,个人理解为实例化的时间不同,1在首次通过Resolve调用的时候,2在注册的时候进行实例化。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值