2012-03-29 90 views
3

我試圖創建一個從博客中檢索某些博客帖子的控制器。 我想檢索前20個帖子& 20個最受好評的帖子。在果園模塊中使用IBlogService(或任何其他服務)

爲此我創建了一個控制器,它將檢索這些信息。深入標準的Orchard博客模塊後,我看到我需要IBlogService或IBlogPostService。 我可以看到這些都是在BlogPostController注入,像這樣:

public BlogPostController(
      IOrchardServices services, 
      IBlogService blogService, 
      IBlogPostService blogPostService, 
      IFeedManager feedManager, 
      IShapeFactory shapeFactory) 

但如何這些服務有線/連接/注射?我無法找到調用構造函數的那段代碼,也找不到像我以前在StructureMap中那樣的線路。

我可以在構造函數中添加Iservices,並且Orchard會確保我有合適的對象,還是我需要做一些事情?

此刻我的課看起來像這樣(默認):

public class FrontpageController : Controller 
{ 
    public IOrchardServices Services { get; set; } 

    public FrontpageController(IOrchardServices services) 
    { 
     Services = services; 
     T = NullLocalizer.Instance; 
    } 

    public Localizer T { get; set; } 

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

     throw new NotImplementedException(); 
    } 
} 

回答

5

果園通過反轉的控制使用dependeny注射,使用庫調用AutoFac。聽起來像一口一口,但事實並非如此。實際上,您可以在構造函數的參數中指定所需的服務,AutoFac會自動解析它們並使用實現您指定的接口的類的實例調用構造函數。

您已經將IOrchardServices注入到您的控制器中,因此您可以對其他實現IDependency的類/接口執行相同的操作。 (IBlogPostServiceIBlogService無論從IDependency繼承)

爲了做同樣的博客服務,那麼你就可以做到以下幾點:

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(); 
    } 
} 

然後在您的Index方法你可以開始使用_blogs_posts到執行博客相關的操作。

+1

謝謝!我已經懷疑過這樣的事情,但是我找不到解決方案中的任何接線/設置類/文件。會試試這個! – 2012-03-30 09:54:59

+0

不用擔心:)我建議通讀一些AutoFac文檔或使用AutoFac編寫一些內容,因爲我發現它確實幫助我瞭解所有IoC內容。 – mdm 2012-03-30 09:56:33

+1

此外,您還應該聲明Orchard.Blogs作爲您將此接口注入到的任何功能的依賴項,否則在啓用/禁用功能時可能會陷入混亂。依賴關係可以在module.txt文件中聲明。 – 2014-04-02 08:19:57

相關問題