В настоящее время я тестирую Касл Виндзор против Ninject, и мне действительно нравится то, что может предложить Виндзор, у меня просто проблема с инъекцией в репозиторий.
Итак, вот настройки ... У меня есть 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, который не был зарегистрирован.
И я не могу понять, почему! Я попытался установить установщик репо как синглтон и попытался переупорядочить процесс регистрации, чтобы настройки репо были установлены до контроллеров.
Когда я отлаживаю и запускаю заводскую линию контроллера в Global.asax, он говорит, что все, кроме HomeController, было правильно разрешено.
Мысли