2011-08-10 10 views
1

WebFormsでCastle Windsorをどのように配線するのかと思いました。WebFormsへのnHibernate ISessionのCastle Windsor依存性注入

私はMVCのコントローラ、第2ラインの配線を想定しています:

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

がどのように私は、ASP.NETでWebフォームを配線していますか?

私は同じWebFormsセットアップに変更したプロジェクトを持っていました。 Castle WindsorがISessionをASPXページに挿入するようになるまで、すべてが機能します。これは単にできませんし、私は前の2行目のコードはMVCコントローラのためのものであるという前提の下にあります。

私はNHibernateはインストーラでこれを持っているが、両方のプロジェクトのtehの同じ場所に:

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

私はもともと、これはそれを行うだろうと想定していたが、それはそうではありません。

私は数日間このことに固執しており、これについての公式の資料はほとんどありません。私は自分の髪を切り取っています。

私はASP.NETのWebフォームは、具体的に依存性の注入で動作するように設計されていないが、私は城ウィンザーは、もはや互換性および/または意志はないことを確認することはできません場合はNinjectは、少しハッキングとはいえ、それを行っている知っていますWebFormsをサポートします。私は何かに移動します。

答えて

0

ここでコードを使用してWebFormsにCastle Windsorを埋め込むことができました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; } 
    } 
} 

を持っていたプレゼンターは、フォームコンテナ解決されたとして、それは私のソリューションは、ビリーMcCaffertyにより大きなarticleに基づいた依存関係

をアップ配線に正常に戻って、その後
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"); 
    } 

} 

です

+0

ありがとう、ちょうど私が探していたもの。私は基本に戻ってキャッスルを裂きましたが。私がもう一度それを必要とすれば私はどこを見るか知っている。 – Anthony