我想知道如何在WebForms中连接Castle Windsor。
我假设第二行连接MVC中的控制器:
// Initialize Windsor
IWindsorContainer container = new WindsorContainer().Install(FromAssembly.This());
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container.Kernel));
如何在ASP.NET中连接WebForms?
我有一个项目,我已将其修改为相同的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 :(得分:0)
我设法使用此处的代码将Castle Windsor填入WebForms How to use Castle Windsor with ASP.Net web forms?它使用一个属性来标记应该在WebFrom中注入依赖项的位置。
然后我使用了MVP模式。每个WebForm都有一个演示者
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; }
}
}
当从容器中解析Presenter时,它会恢复正常以连接依赖项
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");
}
}
我的解决方案基于Billy McCafferty的伟大article