Code: Select all
public class AutoregisterableModule : Autofac.Module
{
private readonly string _nameFilter;
///
/// Default ctor
///
///
Load will only search assemblies with names that contains filter
public AutoregisterableModule(string nameFilter)
{
_nameFilter = nameFilter;
}
///
/// Register's dependencies
///
protected override void Load(ContainerBuilder builder)
{
var assemblies = new List();
var dependencies = DependencyContext.Default.RuntimeLibraries.Where(x => x.Name.Contains(_nameFilter));
foreach (var library in dependencies)
{
var assembly = Assembly.Load(new AssemblyName(library.Name));
assemblies.Add(assembly);
}
builder.Register(c => new LogInterceptor()).InstancePerLifetimeScope();
var isProd = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Production";
var containerBuilder = builder.RegisterAssemblyTypes(assemblies.ToArray())
.Where(TypesToRegisterFilter)
.PreserveExistingDefaults()
.AsImplementedInterfaces();
if (!isProd)
{
containerBuilder.EnableInterfaceInterceptors();
}
base.Load(builder);
}
private static bool TypesToRegisterFilter(Type type)
{
return !type.IsSubclassOf(typeof(SwaggerConfigureOptions)) && !typeof(BackgroundService).IsAssignableFrom(type);
}
}
Code: Select all
containerBuilder.EnableInterfaceInterceptors();
< /code>
Mein Dienst sieht aus wie < /p>
[Intercept(typeof(LogInterceptor))]
public class CategoriesService : ICategoriesService
{
// some code here
}