在 asp.net 的MVC应用程序中,我希望通过让这是单独的文件来组织应用程序,而不是使用大量Autofac脚手架(例如组件注册(来膨胀Application_Start((。
有没有我可以遵循的模式示例?这是自动FAC模块的用途吗?
例如,如果我想在同一个文件中所有与 Widget 相关的注册,也许在某个位置的 Widget MVC 区域中:
builder.RegisterType<FooWidget>().As<IWidget>();
builder.RegisterType<BarWidget>().As<IWidget>();
是的。这正是模块的作用。根据您需要注册的数量,您可以选择为每个组件创建一个模块,每个概念/类型创建一个模块(即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
。
如果我知道我需要很多注册,我会从模块开始。其他时候,我从小处着手,将所有注册放在一个地方,直到需要更具可读性/可维护性的解决方案,然后重构为模块。