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()。
相关阅读
- WebApi2 Owin Autofac Demo源码下载
- ASP.NET Core Autofac 惰性属性注入为null 动态注入
- 获取Autofac中已注册的实例或服务 services
- .Net Core WPF中使用Autofac 依赖注入