hello to everyone.
I do not have much experience in AutoFac structure. I had to use this structure in any project. I am trying structure no problem. but here the working principle is exactly? I want to learn and improve myself.
public void Register(ContainerBuilder builder)
{
builder.RegisterType<SettingService>().As<ISettingService>().InstancePerHttpRequest();
builder.RegisterSource(new SettingsSource());
}
public class SettingsSource : IRegistrationSource
{
static readonly MethodInfo BuildMethod = typeof(SettingsSource).GetMethod("BuildRegistration",BindingFlags.Static | BindingFlags.NonPublic);
public IEnumerable<IComponentRegistration> RegistrationsFor(Service service,Func<Service, IEnumerable<IComponentRegistration>> registrations)
{
var ts = service as TypedService;
if (ts != null && typeof(ISettings).IsAssignableFrom(ts.ServiceType))
{
var buildMethod = BuildMethod.MakeGenericMethod(ts.ServiceType);
yield return (IComponentRegistration)buildMethod.Invoke(null, null);
}
}
static IComponentRegistration BuildRegistration<TSettings>() where TSettings : ISettings, new()
{
return RegistrationBuilder
.ForDelegate((c, p) =>
{
return c.Resolve<ISettingService>().LoadSetting<TSettings>();
})
.InstancePerHttpRequest()
.CreateRegistration();
}
}