【发布时间】:2011-09-03 10:09:51
【问题描述】:
我目前正在测试 Castle Windsor 与 Ninject,我真的很喜欢 Windsor 提供的功能,我只是在存储库注入方面遇到了问题。
所以,这里是设置...我有一个看起来像这样的 ControllersInstaller...
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(FindControllers().Configure(ConfigureControllers()));
}
private BasedOnDescriptor FindControllers()
{
return AllTypes.FromThisAssembly()
.BasedOn<IController>()
.If(Component.IsInSameNamespaceAs<HomeController>())
.If(t => t.Name.EndsWith("Controller"));
}
private ConfigureDelegate ConfigureControllers()
{
return c => c.LifeStyle.Transient;
}
}
一个看起来像这样的上下文安装程序...
public class ContextInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(t => t.Name == "MyContext"));
}
}
还有一个看起来像...的 repo 安装程序
public class RepoInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(type => type.Name.EndsWith("Repo"))
.WithService.DefaultInterface()
.Configure(c => c.LifeStyle.Singleton));
}
}
然后在 Global.asax 我通过...注册它们
private static void BootstrapContainer()
{
var container = new WindsorContainer() // Create a container to hold the dependencies
.Install(
new ContextInstaller(),
new RepoInstaller(),
new ControllersInstaller()
); // Scan this assembly for all IWindsorInstaller
var controllerFactory = new WindsorControllerFactory(container.Kernel); // Create a new instance
ControllerBuilder.Current.SetControllerFactory(controllerFactory); // Use my factory instead of default
}
我的家庭控制器看起来像......
public class HomeController : Controller
{
IMyRepo _repo;
public HomeController(MyRepo repo)
{
_repo = repo;
}
但无论出于何种原因,当我调试我得到的东西时...... 此组件的某些依赖项无法静态解析。 MyProject.Controllers.HomeController 正在等待以下依赖项: 服务: - MyProject.Models.MyRepo 未注册。
我不知道为什么!我尝试将我的 repo 安装程序安装为单例,并尝试重新排序注册过程,以便在控制器之前设置 repo。
当我在 Global.asax 中调试并点击控制器工厂线时,它说除了 HomeController 之外的所有内容都已正确解决。
想法?
【问题讨论】:
标签: asp.net asp.net-mvc-3 castle-windsor ioc-container