假设您正在处理一个 ASP.NET MVC 项目,并且它在单个解决方案中被分成不同的项目。每个项目都创建了 autofac 模块来连接依赖项。现在,我想扫描程序集并将所有模块注册到容器中。
我采用了类似于此处共享的扩展方法http://goo.gl/VJEct
public static void RegisterAssemblyModules(this ContainerBuilder builder, Assembly
assembly)
{
var scanningBuilder = new ContainerBuilder();
scanningBuilder.RegisterAssemblyTypes(assembly)
.Where(t => typeof(IModule).IsAssignableFrom(t))
.As<IModule>();
using (var scanningContainer = scanningBuilder.Build())
{
foreach (var m in scanningContainer.Resolve<IEnumerable<IModule>>())
builder.RegisterModule(module);
}
}
我的第一个问题是,考虑到这个示例是几年前提供的,这仍然是与当前版本的 autofac 一起使用的可行结构吗?
其次,MVC 应用程序依赖于其他层的功能,这意味着有时我需要使用 .InstancePerHttpRequest() 注册类型。但是,我还希望可以选择从非 Web 应用程序中引用它们,而不是依赖于 System.Web。注册可在这些不同上下文中使用的模块的最佳方法是什么?