Я пытаюсь создать модуль CORC CORS, который позволяет веб-службе RESTful использовать OpenRasta для данного маршрута (например, openrasta/*).Orchard CMS: Создание модуля для OpenRasta, проблемы с инъекцией зависимостей
Мне нужно добраться до ContentManager Orchard, чтобы вернуть контент для службы, поэтому мой обработчик OpenRasta (ContentHandler) использует ContentService, который реализует IContentService, который наследует IDependency. Как правило, это будет работать, потому что сад будет впрыскивать ContentManager в конструктор:
public class ContentService : IContentService {
public IContentManager content;
public ContentService(IContentManager content) {
this.content = content;
}
public IEnumerable<string> GetContentTypeDefinitionNames() {
return content.GetContentTypeDefinitions().Select(d => d.Name);
}
}
Но когда я запускаю его я получаю сообщение об ошибке, потому что OpenRasta ничего не знаю о зависимости Orchard и это пытается создать ContentService не знает, не Orchard, который является достаточно справедливым:
OpenRasta.DI.DependencyResolutionException: не удалось разрешить Типу ContentService, поскольку его зависимостей не может быть fullfilled Constructor: Orchard.ContentManagement.IContentManager
Есть ли способ достичь этого, могу ли я пойти в класс Orchard и сказать «дайте мне экземпляр ContentManager»?
Обновление: См. Мои комментарии по поводу ответа @ rfcdejong для получения обновлений о моем прогрессе.
PS: Я не знаю о OpenRasta и что вы делаете с этим. Orchard использует Autofac, и все интерфейсы зависимостей регистрируются автоматически. – rfcdejong
Привет @rfcdejong! Большое спасибо за ответ. То, что у вас есть, похоже, что это сработает, но я немного смущен. У меня нет ServiceHostFactory, и я не уверен, что HostContainer должен быть честным - могу ли я получить HostContainer для текущего экземпляра Orchard или мне нужно его создать? – greg84
Кроме того, я действительно хочу разрешить IContentManager: 'var contentManager = LifetimeScope.ResolveNew();' - IContentService уже может быть разрешен OpenRasta, поскольку я зарегистрировал зависимость напрямую с ним. Это связь между IContentService и IContentManager, с которыми я борюсь. –
greg84