Using AutoFac to register open generic service types

This commit is contained in:
Ryan Nowak 2014-03-13 13:10:10 -07:00
parent 930986d6a2
commit a5cb050b97
3 changed files with 15 additions and 11 deletions

View File

@ -2,7 +2,9 @@
using System;
using Autofac;
using Microsoft.AspNet.Abstractions;
using Microsoft.AspNet.DependencyInjection;
using Microsoft.AspNet.DependencyInjection.Autofac;
using Microsoft.AspNet.DependencyInjection.NestedProviders;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Routing;
@ -18,6 +20,10 @@ namespace MvcSample.Web
AutofacRegistration.Populate(containerBuilder, builder.ServiceProvider, services);
containerBuilder.RegisterInstance<PassThroughAttribute>(new PassThroughAttribute());
// Temporary until we have support for open generics in our DI system.
containerBuilder.RegisterGeneric(typeof(NestedProviderManager<>)).As(typeof(INestedProviderManager<>));
containerBuilder.RegisterGeneric(typeof(NestedProviderManagerAsync<>)).As(typeof(INestedProviderManagerAsync<>));
var serviceProvider = containerBuilder.Build().Resolve<IServiceProvider>();
var routes = new RouteCollection()

View File

@ -1,13 +1,13 @@
#if NET45

#if NET45
using Autofac;
using System;
using Microsoft.AspNet.Abstractions;
using Microsoft.AspNet.ConfigurationModel;
using Microsoft.AspNet.DependencyInjection;
using Microsoft.AspNet.DependencyInjection.Autofac;
using Microsoft.AspNet.DependencyInjection.NestedProviders;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Routing;
using Microsoft.Net.Runtime;
using Owin;
namespace MvcSample
@ -37,6 +37,10 @@ namespace MvcSample
AutofacRegistration.Populate(containerBuilder, _serviceProvider, services);
containerBuilder.RegisterInstance<PassThroughAttribute>(new PassThroughAttribute());
// Temporary until we have support for open generics in our DI system.
containerBuilder.RegisterGeneric(typeof(NestedProviderManager<>)).As(typeof(INestedProviderManager<>));
containerBuilder.RegisterGeneric(typeof(NestedProviderManagerAsync<>)).As(typeof(INestedProviderManagerAsync<>));
var serviceProvider = containerBuilder.Build().Resolve<IServiceProvider>();
var routes = new RouteCollection()

View File

@ -1,7 +1,7 @@
using System.Collections.Generic;

using System.Collections.Generic;
using Microsoft.AspNet.ConfigurationModel;
using Microsoft.AspNet.DependencyInjection;
using Microsoft.AspNet.DependencyInjection.NestedProviders;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
@ -38,11 +38,6 @@ namespace Microsoft.AspNet.Mvc
yield return describe.Transient<IVirtualPathViewFactory, VirtualPathViewFactory>();
yield return describe.Transient<IViewEngine, RazorViewEngine>();
// This is temporary until DI has some magic for it
yield return describe.Transient<INestedProviderManager<ActionDescriptorProviderContext>,
NestedProviderManager<ActionDescriptorProviderContext>>();
yield return describe.Transient<INestedProviderManager<ActionInvokerProviderContext>,
NestedProviderManager<ActionInvokerProviderContext>>();
yield return describe.Transient<INestedProvider<ActionDescriptorProviderContext>,
ReflectedActionDescriptorProvider>();
yield return describe.Transient<INestedProvider<ActionInvokerProviderContext>,
@ -63,7 +58,6 @@ namespace Microsoft.AspNet.Mvc
yield return describe.Transient<IInputFormatter, JsonInputFormatter>();
yield return describe.Transient<INestedProviderManager<FilterProviderContext>, NestedProviderManager<FilterProviderContext>>();
yield return describe.Transient<INestedProvider<FilterProviderContext>, DefaultFilterProvider>();
yield return describe.Transient<IModelValidatorProvider, DataAnnotationsModelValidatorProvider>();