Autofac:逻辑地组织组件注册



在 asp.net 的MVC应用程序中,我希望通过让这是单独的文件来组织应用程序,而不是使用大量Autofac脚手架(例如组件注册(来膨胀Application_Start((。

有没有我可以遵循的模式示例?这是自动FAC模块的用途吗?

例如,如果我想在同一个文件中所有与 Widget 相关的注册,也许在某个位置的 Widget MVC 区域中:

builder.RegisterType<FooWidget>().As<IWidget>();
builder.RegisterType<BarWidget>().As<IWidget>();

是的。这正是模块的作用。根据您需要注册的数量,您可以选择为每个组件创建一个模块,每个概念/类型创建一个模块(即ControllersModuleRepositoriesModule等(。在您的情况下,您可能希望有一个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

如果我知道我需要很多注册,我会从模块开始。其他时候,我从小处着手,将所有注册放在一个地方,直到需要更具可读性/可维护性的解决方案,然后重构为模块。

最新更新