我目前正在測試溫莎城堡與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"));
}
}
和回購安裝程序看起來像......
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外的所有內容都已正確解析。
想法?
其實我說你:-P我很高興你發現它相同的解決方案你自己。與溫莎玩得開心! – Crixo 2011-05-31 13:00:48
不客氣! – Crixo 2011-05-31 14:20:05