Question

I have the following code that I am converting from Ninject to Autofac:

kernel.Register(c => new HttpContextWrapper(HttpContext.Current))
    .As<HttpContextBase>().InstancePerApiRequest();
kernel.RegisterType<TokenHelper>().As<ITokenHelper>();

kernel.Register(c => {
    var tokenHelper = // Ninject code: kernel.Get<ITokenHelper>();
    var httpContextBase = // Ninject code: kernel.Get<HttpContextBase>();
    var token = tokenHelper.GetToken(httpContextBase);

    var connectionContext = // Ninject code: kernel.Get<ISqlServerConnectionContext>();
    connectionContext.Token = token;

    return token;
}).As<IMinimalSecurityToken>();

In my IMinimalSecurityToken registration, how do I tell Autofac to use the previously defined types to return an instance for tokenHelper and httpContextBase?

Was it helpful?

Solution

In the Register method the c parameter is an instance of a IComponentContext implementation which is the container in which the component is being created.

So the c instance has all the necessary extension methods to resolve your previously registered types:

kernel.Register(c => {
    var tokenHelper = c.Resolve<ITokenHelper>();
    var httpContextBase = c.Resolve<HttpContextBase>();
    var token = tokenHelper.GetToken(httpContextBase);

    var connectionContext = c.Resolve<ISqlServerConnectionContext>();
    connectionContext.Token = token;

    return token;
}).As<IMinimalSecurityToken>();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top