我正在尝试创建一个控制器,从博客中检索某些博客帖子.我想要检索前20个帖子和20个评分最高的帖子.
为此我创建了一个控制器来检索这些信息.在深入了解标准的Orchard博客模块后,我发现我需要IBlogService或IBlogPostService.我可以看到这些是在BlogPostController中注入的,如下所示:
public BlogPostController(
IOrchardServices services,
IBlogService blogService,
IBlogPostService blogPostService,
IFeedManager feedManager,
IShapeFactory shapeFactory)
Run Code Online (Sandbox Code Playgroud)
但这些服务如何连线/连接/注入?我找不到调用构造函数的代码段,也找不到像我在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();
}
}
Run Code Online (Sandbox Code Playgroud)
Orchard使用名为AutoFac的库通过反转控制使用依赖注入.听起来像是满口,但事实并非如此.从本质上讲,您可以指定在构造函数中的参数需要的服务,并AutoFac自动地解决他们并调用的实现指定接口的类的实例构造函数.
您已经注入IOrchardServices到控制器中,因此您可以对实现的任何其他类/接口执行相同操作IDependency.(IBlogPostService并且IBlogService都继承自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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的Index方法中,您可以开始使用_blogs并_posts执行与博客相关的操作.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |