Autofac为我们提供了RegisterInstance和SingleInstance方法,它们使用的示例如下:

var instance = new MyInstance(); 

builder.RegisterInstance<IService>(instance); 
builder.Register(c => instance).As<IService>().SingleInstance(); 

相同之处是它们都是单例模式,实例的初始化都是外面提供的。不同之处是Register.As.SingleInstance 同时注册了IService接口。
我们也可以使用Autofac内置提供的构造函数来初始化。如下:

builder.Register(typeof(MyInstance)).As<IService>().SingleInstance(); 

以上就是他们的区别,总的来说Autofac为我们提供的方式还是挺多样化的。

区别说明

  • RegisterInstance(obj):把已创建的外部实例注册为单例,容器不负责释放。
  • Register(c => instance).As<IService>().SingleInstance():同样注册单例,但容器接管生命周期,并同时绑定接口。
  • RegisterInstance 需显式 .As<IService>() 或 .ExternallyOwned() 才便于使用。
  • 如需容器自动 Dispose,建议用 RegisterType().SingleInstance()。

相关阅读

参考资料