Orchardcms 在Orchard模块中使用IBlogService(或任何其他服务)

Orchardcms 在Orchard模块中使用IBlogService(或任何其他服务),orchardcms,Orchardcms,我试图创建一个控制器,从博客中检索某些博客文章。 我想检索排名前20的帖子&排名前20的帖子 为此,我创建了一个控制器,它将检索此信息。在深入研究了标准的Orchard博客模块之后,我发现我需要IBlogService或IBlogPostService。 我可以看到这些被注入BlogPostController,如下所示: public BlogPostController( IOrchardServices services, IBlogSer

我试图创建一个控制器,从博客中检索某些博客文章。 我想检索排名前20的帖子&排名前20的帖子

为此,我创建了一个控制器,它将检索此信息。在深入研究了标准的Orchard博客模块之后,我发现我需要IBlogService或IBlogPostService。 我可以看到这些被注入BlogPostController,如下所示:

public BlogPostController(
            IOrchardServices services, 
            IBlogService blogService, 
            IBlogPostService blogPostService,
            IFeedManager feedManager,
            IShapeFactory shapeFactory) 
但这些服务是如何连接/注入的?我找不到调用构造函数的代码段,也找不到StructureMap中常用的一些连接

我可以只在构造函数中添加iSeries设备,然后Orchard会确保我得到了正确的对象,或者我需要在之前做些什么吗

目前,我的类看起来是这样的(默认):


Orchard使用一个名为。听起来像一口,但实际上不是。本质上,您可以在构造函数的参数中指定所需的服务,AutoFac会自动解析这些服务,并使用实现指定接口的类的实例调用构造函数

您已经将
IOrchardServices
注入控制器,因此您可以对实现
IDependency
的任何其他类/接口执行相同的操作。(
IBlogPostService
IBlogService
都继承自
IDependency

要对blogs服务执行相同的操作,则可以执行以下操作:

public class FrontpageController : Controller
{
    public IOrchardServices Services { get; set; }
    private readonly IBlogService _blogs;
    private readonly IBlogPostService _posts;

    public FrontpageController(IOrchardServices services, IBlogService blogs, IBlogPostService posts)
    {
        Services = services;
        T = NullLocalizer.Instance;
        _posts = posts;
        _blogs = blogs;
    }

    public Localizer T { get; set; }

    [HttpGet]
    public ActionResult Index()
    {
        //Do something to get blogposts

        throw new NotImplementedException();
    }
}

然后在您的
索引
方法中,您可以开始使用
\u blogs
\u posts
执行与blog相关的操作。

谢谢!我已经怀疑类似的问题,但在解决方案中找不到任何接线/设置类/文件。我会试试这个!不用担心:)我建议阅读一些AutoFac文档或使用AutoFac编写一些东西,因为我发现它确实帮助我了解了所有的IoC内容。此外,您还应该将Orchard.blog声明为您将此接口注入的任何功能的依赖项,否则,在启用/禁用功能时,您可能会陷入混乱。依赖项可以在module.txt文件中声明。
public class FrontpageController : Controller
{
    public IOrchardServices Services { get; set; }
    private readonly IBlogService _blogs;
    private readonly IBlogPostService _posts;

    public FrontpageController(IOrchardServices services, IBlogService blogs, IBlogPostService posts)
    {
        Services = services;
        T = NullLocalizer.Instance;
        _posts = posts;
        _blogs = blogs;
    }

    public Localizer T { get; set; }

    [HttpGet]
    public ActionResult Index()
    {
        //Do something to get blogposts

        throw new NotImplementedException();
    }
}