2011-08-10 93 views
1

我想知道如何在WebForms中連接Castle Windsor。Castle Windsor將nHibernate ISession注入到WebForms中

我假設第二行線了控制器在MVC:

// Initialize Windsor 
IWindsorContainer container = new WindsorContainer().Install(FromAssembly.This()); 
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container.Kernel)); 

如何再用鐵絲起來的WebForms在ASP.NET?

我有一個項目,我修改成相同的WebForms設置。一切工作到我希望Castle Windsor將ISession注入ASPX頁面爲止。它根本不是,我假設上面的第二行代碼是MVC控制器的代碼。

我有這個在我的NHibernate的安裝程序,在這兩個項目德同一個地方:

container.Register(Component.For<ISession>() 
      .LifeStyle.PerWebRequest 
      .UsingFactoryMethod(kernel => kernel.Resolve<ISessionFactory>().OpenSession())); 

我原本以爲這會做,但它並非如此。

我一直堅持這幾天,並在這個很少的官方文件,我接近撕裂我的頭髮,剩下的是什麼。

我確實知道ASP.NET WebForms並不是專門設計用於依賴注入的,但Ninject已經做到了,雖然有點黑客攻擊,但如果我可以確認Castle Windsor不兼容和/或不再支持WebForms我將轉向其他方面。

回答

0

我設法使用此處的代碼填充Castle Windsor到WebForms How to use Castle Windsor with ASP.Net web forms?它使用一個屬性來標記WebFrom中應該注入依賴項的位置。

然後我使用了MVP模式。每個Web窗體有一個主持人

public partial class TestPage : UserControl, IShowTestPage 
{ 
    [Inject] 
    public TestPagePresenter Presenter { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) return; 

     this.Presenter.OnViewInitialized(); 
    } 

    public string TestMessage 
    { 
     get { return litTestMessage.Text; } 
     set { litTestMessage.Text = value; } 
    } 
} 

由於演示解決形式的容器,它再回到正常的連接最多的依賴

public interface IShowTestPage { 
    string TestMessage { get; set;} 
} 

public class TestPagePresenter { 
    private ISession session; 

    public TestPagePresenter(ISession session) { 
     this.session = session; 
    } 

    private IShowTestPage view; 
    public IShowTestPage { set { view = value; } } 

    public void OnViewInitialized { 
     TestMessage = session.Query("some database query"); 
    } 

} 

我的解決方案是基於由比利·麥卡弗蒂很大article

+0

謝謝,正是我所期待的。雖然我已經回到基礎並摧毀了城堡。如果我再次需要它,我知道在哪裏看。 – Anthony

相關問題