应用中同时使用到这两种注册方式,以下是自己的理解
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在注册的时候进行实例化。
本文深入解析依赖注入(DI)容器中的两种主要注册方式:RegisterInstance和RegisterType的区别及应用场景。RegisterInstance用于注册已实例化的单例对象,而RegisterType则在Resolve调用时实例化对象,可配合ContainerControlledLifetimeManager实现单例模式。

被折叠的 条评论
为什么被折叠?



