繁体   English   中英

如何在Autofac模块之间共享程序集引用

[英]How can I share assembly references between Autofac modules

在我的应用程序中,我通常将有多个autofac模块,其中许多模块将执行一些工作以检索程序集引用,例如Assembly.GetExecutingAssembly()builder.RegisterAssemblyTypes(assemblyRef)等。通常,不同的模块将检索相同的程序集,因此假设存在反射中的开销是否总有在模块之间共享程序集引用以使其更有效?

例如,在应用程序的根目录中创建对程序集的静态引用是否合适,以便每个模块都可以引用它们? 如果使用它们的唯一目的是用于注册过程,则这似乎有点过头了。

或者,我是否在尝试优化不需要优化的内容?

跨程序集的反射几乎没有开销-这不是.NET 1.1中的方式。 尤其是在应用程序启动时获得一次性注册的意义上,您正在涉足微优化领域。

如果您担心反射性能,我建议您实际测量它,然后尝试做一些其他的参考缓存,看看有什么不同。 我敢打赌,您实际上并没有看到可观的节省-无论如何,不​​足以证明额外的应用程序复杂性和更紧密的耦合。

可以做的一件事很简单,就是将一个构造函数添加到您的模块中,该构造函数将使用应该使用的程序集列表。

public class ScanningModule : Module
{
  private IEnumerable<Assembly> _assemblies;
  public ScanningModule(IEnumerable<Assembly> assemblies)
  {
    this._assemblies = assemblies;
  }

  protected override void Load(ContainerBuilder builder)
  {
    builder.RegisterAssemblyTypes(this._assemblies)...
  }
}

注册模块时,将程序集传递给它。

var assemblies = ScanForTheAssemblies();
var builder = new ContainerBuilder();
builder.RegisterModule(new ScanningModule(assemblies));
...
var container = builder.Build();

但是,我不确定您是否会看到性能大幅提高,尤其是因为它只会发生一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM