首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 範例專案「Suteki.Shop」分析:Castle Windsor IOC 容器整合

     編輯:關於ASP.NET

專案採用 Castle Windsor 實現控制反轉(IOC),核心概念:

  • Container:微核心掃描類別依賴並自動注入。
  • Component:實作服務介面的具體類別。
  • Service:介面契約,支援多實作切換。
  • Facilities:擴充容器功能(如交易、啟動器)。

啟動初始化:Global.asax

protected void Application_Start() {
  RouteManager.RegisterRoutes(RouteTable.Routes);
  InitializeWindsor();
}
protected virtual void InitializeWindsor() {
  if (container == null) {
    container = ContainerBuilder.Build("Configuration\\Windsor.config");
    WcfConfiguration.ConfigureContainer(container);
    ServiceLocator.SetLocatorProvider(() => container.Resolve<IServiceLocator>());
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));
  }
}

ContainerBuilder.Build 註冊重點

public static IWindsorContainer Build(string configPath) {
  var container = new WindsorContainer(new XmlInterpreter(configPath));
  container.Kernel.AddHandlerSelector(new UrlBasedComponentSelector(
    typeof(IBaseControllerService), typeof(IImageFileService), typeof(IConnectionStringProvider)));
  container.Register(AllTypes.Of<Controller>().FromAssembly(Assembly.GetExecutingAssembly())
    .Configure(c => c.LifeStyle.Transient.Named(c.Implementation.Name.ToLower())));
  container.Register(
    Component.For<IUnitOfWorkManager>().ImplementedBy<LinqToSqlUnitOfWorkManager>().LifeStyle.Transient,
    Component.For<IFormsAuthentication>().ImplementedBy<FormsAuthenticationWrapper>(),
    Component.For<IServiceLocator>().Instance(new WindsorServiceLocator(container)),
    Component.For<AuthenticateFilter>().LifeStyle.Transient,
    Component.For<UnitOfWorkFilter>().LifeStyle.Transient,
    Component.For<DataBinder>().LifeStyle.Transient,
    Component.For<LoadUsingFilter>().LifeStyle.Transient,
    Component.For<CurrentBasketBinder>().LifeStyle.Transient,
    Component.For<ProductBinder>().LifeStyle.Transient,
    Component.For<OrderBinder>().LifeStyle.Transient,
    Component.For<IOrderSearchService>().ImplementedBy<OrderSearchService>().LifeStyle.Transient,
    Component.For<IEmailBuilder>().ImplementedBy<EmailBuilder>().LifeStyle.Singleton
  );
  return container;
}

展示了 Controller 自動註冊、Filter/Binder 作為 Component 註冊、ServiceLocator 橋接等進階 IOC 應用模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved