gpt4 book ai didi

asp.net-mvc - ASP.NET MVC、MVCContrib、Structuremap,让它作为 Controller 工厂工作吗?

转载 作者:行者123 更新时间:2023-12-02 21:01:14 27 4
gpt4 key购买 nike

我正在尝试使用结构图来正确创建我的 Controller ,我正在使用 DI 将 INewsService 注入(inject) NewsController,这是我拥有的唯一构造函数。

public class NewsController : Controller
{
private readonly INewsService newsService;

public NewsController(INewsService newsService)
{
this.newsService = newsService;
}

public ActionResult List()
{
var newsArticles = newsService.GetNews();
return View(newsArticles);
}
}

我正在使用此代码来启动应用程序

public class Application : HttpApplication
{
protected void Application_Start()
{
RegisterIoC();
RegisterViewEngine(ViewEngines.Engines);
RegisterRoutes(RouteTable.Routes);
}

public static void RegisterIoC()
{
ObjectFactory.Initialize(config => {
config.UseDefaultStructureMapConfigFile = false;
config.AddRegistry<PersistenceRegistry>();
config.AddRegistry<DomainRegistry>();
config.AddRegistry<ControllerRegistry>();
});
DependencyResolver.InitializeWith(new StructureMapDependencyResolver());
ControllerBuilder.Current.SetControllerFactory(typeof(IoCControllerFactory));
}
}

但是 Structuremap 似乎不想注入(inject) INewsService 并且我收到错误没有为此对象定义无参数构造函数。

我错过了什么?

最佳答案

我使用 StructureMap 提供的“默认约定”机制来避免需要单独配置每个接口(interface)。下面是我用来实现该功能的代码:

我的 Global.asax 在 Application_Start 中有这一行(它使用 MvcContrib 中的 StructureMap 工厂):

protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ObjectFactory.Initialize(x =>
{
x.AddRegistry(new RepositoryRegistry());
});
ControllerBuilder.Current.SetControllerFactory(typeof(StructureMapControllerFactory));
}

RepositoryRegistry 类如下所示:

public class RepositoryRegistry : Registry
{

public RepositoryRegistry()
{
Scan(x =>
{
x.Assembly("MyAssemblyName");
x.With<DefaultConventionScanner>();
});

}

}

DefaultConventionScanner 查找遵循 ISomethingOrOther 和 SomethingOrOther 命名约定的接口(interface)/类对,并自动将后者关联为前一个接口(interface)的具体类型。

如果您不想使用默认约定机制,那么您可以在Registry 类中添加代码,以使用以下语法将每个接口(interface)显式映射到具体类型:

ForRequestedType<ISomethingOrOther>().TheDefaultIsConcreteType<SomethingOrOther>();

关于asp.net-mvc - ASP.NET MVC、MVCContrib、Structuremap,让它作为 Controller 工厂工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/595171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com