1. 程式人生 > 其它 >程式猿多個物件的友好管理方式IOC容器

程式猿多個物件的友好管理方式IOC容器

大部分程式猿都有物件太多不好管理的煩惱,這裡推薦使用物件容器進行管理,在需要某個物件的時候,CALL它;

使用IOC容器的好處是:解耦了物件之間的強耦合,規範了使用物件的生命週期 缺點:IOC內部使用反射的方式建立物件,會有一定的效能損耗;

下面用以前用過的物件容器SimpleInjector 舉個栗子:

前期工作: 先使用NuGet引入SimpleInjector 包;

由於是面向藉口程式設計,所以每個物件都需要介面

     
//容器物件 
  public class SimpleInjectorDependencyResolver : IDependencyResolver 
    { 
         
        
private static readonly Container _container = new Container(); public object Container { get { return _container; } } public T Resolve() where T : class { return _container.GetInstance(); } public object Resolve(Type type) {
return _container.GetInstance(type); } public Lazy LazyResolve() where T : class { return new Lazy(() => { return Resolve(); }); } }
View Code
 初始化類註冊物件到容器;物件的生命週期: Lifestyle. Scoped :一生一個物件 Transient:每次都是一個新物件 Singleton:單身 
 public
partial class IocConfig { public Container _container = (Container)Engine.Resolver.Container; private void System() { _container.Register < IDbContext>(() => { return new PSADataEntities(DBFactory.ConnectionString); },Lifestyle.Scoped); _container. Register< IUnitOfWork, UnitOfWork> (); _container.Register(typeof(IGenericRepository<>), typeof(GenericRepository<>)); } } 取物件 public class SomeService : BaseService, IBinLocationService { private IGenericRepository _BinLocationReposity; public IGenericRepository BinLocationReposity { get { if (null == _BinLocationReposity) { _BinLocationReposity = Engine.Resolver.Resolve< IGenericRepository< SYS_LOCATION >>(); } return _BinLocationReposity; } } }
View Code

希望幫到了各位有很多物件的程式設計師們