【发布时间】:2011-01-13 12:07:29
【问题描述】:
我已经开始使用 Castle Windsor,不知何故我的应用程序已全部启动并运行,但我并不真正了解它是如何工作的。不要让我参考文档,否则我不会在这里。
在我的 Global.asax.cs 我有这个:
private static IWindsorContainer container;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
BootstrapContainer();
}
protected void Application_End()
{
container.Dispose();
}
private static void BootstrapContainer()
{
container = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
现在这是注册一个我理解的新控制器工厂。我认为从当前程序集安装 WindsorContainer 会注册所有安装程序,例如我有一个存储库安装程序。我假设在 Global.asax 中创建的容器已传递给安装程序。
public class RepositoriesInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(type => type.Name.EndsWith("Repository"))
.WithService.DefaultInterface()
.Configure(c => c.LifeStyle.PerWebRequest));
}
}
在我的控制器中,我创建了一个构造函数并传入了一个 IRepository 参数。我不明白的是控制器如何接受这个论点。
其次,作为测试,我创建了 2 个实现 IRepository 的存储库类。在控制器构造函数中放置一个断点,它会传入这些类之一。如何映射实现 IRepository 的类应该传递给构造函数?
我还启动并运行了 Fluent NHibernate。对于下一阶段,我希望 IRepository 依赖于 ISession。我该怎么做?
感谢您的帮助
【问题讨论】:
标签: asp.net-mvc nhibernate fluent-nhibernate inversion-of-control castle-windsor