C# 通过Autofac的Mapster依赖项注入
根据Mapster文档 我应该做以下几件事:C# 通过Autofac的Mapster依赖项注入,c#,asp.net-mvc-4,autofac,mapster,C#,Asp.net Mvc 4,Autofac,Mapster,根据Mapster文档 我应该做以下几件事: public void ConfigureServices(IServiceCollection services) { ... var config = new TypeAdapterConfig(); services.AddSingleton(config); services.AddScoped<IMapper, ServiceMapper>(); ... } public void配置服
public void ConfigureServices(IServiceCollection services)
{
...
var config = new TypeAdapterConfig();
services.AddSingleton(config);
services.AddScoped<IMapper, ServiceMapper>();
...
}
public void配置服务(IServiceCollection服务)
{
...
var config=new-TypeAdapterConfig();
services.AddSingleton(config);
services.addScope();
...
}
以下是我使用Autofac在MVC 4应用程序中添加上述配置的尝试:
public static void RegisterDependencies()
{
var builder = new ContainerBuilder();
...
var config = new TypeAdapterConfig();
//services.AddSingleton(config); <- Not sure what is the equivalent of this line in Autofac?
//services.AddScoped<IMapper, ServiceMapper>();
// Not sure if the following is correct? Is AddScoped the same as InstancePerHttpRequest?
builder.RegisterType<MapsterMapper.ServiceMapper>()
.As<MapsterMapper.IMapper>()
.InstancePerHttpRequest();
publicstaticvoidregisterDependencies()
{
var builder=new ContainerBuilder();
...
var config=new-TypeAdapterConfig();
//services.AddSingleton(config);
如何添加config
实例的单例
通常,您可以使用fluent方法SingleInstance()
,将服务注册为单例,例如:
builder.RegisterType<MySingleton>().SingleInstance();
不确定我是否正确添加了IMapper
-ServiceMapper
配置
是的,这样应该很好
…如果instanceperhtprequest
等同于AddScoped
嗯,基本上是的,但不是全部
将功能从Microsoft.Extensions.DependencyInjection映射到Autofac并不是那么容易。Autofac附带了一个称为生存期作用域的概念。它允许您注册在特定作用域的生存期内是唯一的并且在该作用域结束后不会使用的组件(因此称为生存期):
builder.RegisterType();
您可以为您想到的任何生命周期概念创建生命周期范围。在web应用程序框架中,最常见的生命周期概念是请求的概念,因此您可以为每个请求创建一个新的生命周期范围。事实上,各个框架的Autofac集成正是以这种方式工作的,因此您不会ave可以自己创建生存期范围
只要您的应用程序域中只有一个生存期概念,这就可以正常工作。一旦您开始在其他生存期范围内创建生存期范围,您就无法定义组件应在哪个生存期范围内是唯一的。这就是为什么Autofac支持对生存期范围进行标记的原因。通过这种方式,您可以将组件注册为唯一的仅适用于具有特定标记的生存期范围:
builder.RegisterType<MyComponent>().InstancePerMatchingLifetimeScope("MyScope");
builder.RegisterType().InstancePerMatchingLifetimeScope(“MyScope”);
现在,对于使用标记“MyScope”
创建的每个生存期作用域,将使用MyComponent
的一个新实例,但其他生存期作用域可能共享同一实例
只是InstancePerMatchingLifetimeScope
的一种方便方法,它为HTTP请求提供了一个特定的唯一标记:
每请求一个实例构建在每匹配生存期范围一个实例的基础上,它提供了一个众所周知的生存期范围标记、一种注册方便的方法以及对常见应用程序类型的集成。不过,在幕后,它仍然只是每匹配生存期范围一个实例
builder.RegisterType<MyComponent>().InstancePerLifetimeScope();
builder.RegisterType<MyComponent>().InstancePerMatchingLifetimeScope("MyScope");