Autofac:逻辑组织组件注册

时间:2018-06-18 09:03:40

标签: autofac

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

是否有一个我可以遵循的模式示例?这是autofac模块的用途吗?

例如,如果我想在同一个文件中进行所有与Widget相关的注册,可能在某个地方的Widget MVC区域中:

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

1 个答案:

答案 0 :(得分:2)

是。这正是模块所做的。根据您需要注册的数量,您可以选择为每个装配创建一个模块,为每个概念/类型创建模块(即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

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