在asp.net MVC应用程序中,我希望通过将这些文件作为单独的文件来组织应用程序,而不是使用大量的Autofac脚手架(例如组件注册)来膨胀Application_Start()。
是否有一个我可以遵循的模式示例?这是autofac模块的用途吗?
例如,如果我想在同一个文件中进行所有与Widget相关的注册,可能在某个地方的Widget MVC区域中:
builder.RegisterType<FooWidget>().As<IWidget>();
builder.RegisterType<BarWidget>().As<IWidget>();
答案 0 :(得分:2)
是。这正是模块所做的。根据您需要注册的数量,您可以选择为每个装配创建一个模块,为每个概念/类型创建模块(即ControllersModule
,RepositoriesModule
等)。在您的情况下,您可能希望拥有WidgetsModule
。您的Application_Start()
只会是:
Assembly[] assemblies = BuildManager.GetReferencedAssemblies().OfType<Assembly>().ToArray();
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterAssemblyModules(assemblies);
IContainer container = containerBuilder.Build();
注册类型有很多有用的方法。它可以将注册代码的数量最小化到可以将它放在一个地方的程度。在您的示例中,RegisterAssemblyTypes(assembly).As<IWidget>()
应足以注册所有IWidget
。
如果我知道我需要大量注册,我会从模块开始。其他时候我从小处开始,将所有注册放在一个地方,直到需要更可读/可维护的解决方案,然后重构模块。