perfil externo Método JSON (AddJsonFile) de ABP vNext introdujo.
ABP comprende un perfil de inyección de dependencia dinámica por JSON
WPFAppModule clase pública: AbpModule
{
public override ConfigureServices void (contexto ServiceConfigurationContext)
{
configuración var = BuildConfiguration ();
// configuración var = context.Services.GetConfiguration ();
context.Services.AddFromConfigurationFile (configuration.GetSection ( "Servicios"));
}
Private static IConfigurationRoot BuildConfiguration ()
{
return new ConfigurationBuilder ()
.SetBasePath (Directory.GetCurrentDirectory ())
.AddJsonFile ( "configuration.json", opcional: true, reloadOnChange: true)
//.AddJsonFile("autofac.json", opcional: false, reloadOnChange: true)
.build ();
}
}
archivo //configuration.json
{
// Descripción: "nombre Realización implementación de la clase clase de espacio de nombres, donde el nombre de ensamblado"
"Servicios": {
"Singleton": [
],
"Transitoria": [
{
"Servicio": "WpfApp1.ISampleService, WpfApp1",
"Aplicación": "WpfApp1.SampleService, WpfApp1"
}
],
"AddScoped": [
]
}
}
ABP inyecta a través de perfil dinámico
https://blog.csdn.net/xhl_james/article/details/90700217
WpfApp1 espacio de nombres
{
ServicesConfiguration public class
{
público IEnumerable <ServiceItem> Singleton {get; conjunto; }
IEnumerable público <ServiceItem> transitoria {get; conjunto; }
IEnumerable público <ServiceItem> AddScoped {get; conjunto; }
}
ServiceItem public class
{
Servicio cadena pública {get; conjunto; }
Implementación public String {get; conjunto; }
}
Clase AddFromConfigurationFileExtension public static
{
/// <summary>
///通过配置文件进行注入实现.
/// </ summary>
/// <observaciones>
/// Hay que señalar que la adopción del archivo de configuración para la configuración, a continuación, asegúrese de interfaz, y el correspondiente montaje
/// typeof (AddFromConfigurationFileExtension) .Incluir ensamblaje de montaje con el directorio.
/// Type.GetType de otro modo no sería encontrar la clase correspondiente.
/// </ Observaciones>
/// <param name = "Servicios"> </ param>
/// <param name = "Configuración"> </ param>
/// <volverá> </ Devoluciones>
public static IServiceCollection AddFromConfigurationFile (al este de Servicios IServiceCollection,
configuración IConfigurationSection)
{
servicesConfiguration var = configuration.Get <servicesConfiguration> ();
el tipo @interface = null, Implementación = null;
SI (servicesConfiguration.
foreach (var-Servicio en servicesConfiguration.Singleton)
{
@interface la Type.GetType = (Service.service, false);
Implementación del Type.GetType = (service.Implementation, false);
SI (@interface == null)
de banda nueva nueva ArgumentNullException El ($ "{} Service.service que no se encuentra el contacto por favor, con el administrador.!", nombredel (@interface));
SI (@interface == null)
de banda nueva nueva ArgumentNullException ($ "} {service.Implementation no se ha encontrado y administradores. Contacto", nombredel (Aplicación)) ;!
services.AddSingleton (@interface, Implementación);
}
}
SI (servicesConfiguration.Transient! = Null)
{
foreach (var servicio en servicesConfiguration.Transient)
{
// asegurar que debidamente registrados. Para evitar que la función de influencia último.
= La @interface Type.GetType (Service.service, false);
Implementación del Type.GetType = (service.Implementation, false);
SI (@interface == null)
de banda nueva nueva ArgumentNullException El ($ "} {Service.service no encontrado, por favor. y el administrador!", nombredel (@interface));
SI (@interface == null)
de banda nueva nueva ArgumentNullException ($ "} {service.Implementation no se ha encontrado el contacto por favor con el administrador", nombredel (aplicación.!) );
services.AddTransient (@interface, Implementación);
}
}
if (! servicesConfiguration.AddScoped = null)
{
foreach (var servicesConfiguration.AddScoped en-servicio)
{
// asegurar el registro adecuado. Para evitar que la función de influencia último.
= La @interface Type.GetType (Service.service, false);
Implementación del Type.GetType = (service.Implementation, false);
SI (@interface == null)
de banda nueva nueva ArgumentNullException El ($ "} {Service.service no encontrado, por favor. y el administrador", nombredel (@interface)) ;!
SI (@interface == null)
arrojar nueva ArgumentNullException ($ "{service.Implementation } , nombredel (Aplicación) que no se encuentra el contacto por favor, con el administrador.");
services.AddScoped (@interface, Implementación);
}
}
Servicios de retorno;
}
}
}