2012-09-08 24 views
5

En la clase AppHost, todos los métodos anulan el uso del contenedor Funq. Uso Autofac en mi aplicación ASP.NET MVC (ejecuto SS lado a lado con mi aplicación MVC).ServiceStack Funq IoC replacement

  1. ¿Hay alguna manera de utilizar ese registro Autofac de global.asax.cs o se trata de una tarea exagerada para reemplazar?
  2. I comentada esta línea en APPHOST

    //ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory (contenedor));

porque estaba estropeando con mis controladores autoamplificados. ¿Es esto suficiente para evitar que Autofac y Funq tengan problemas en mi aplicación? ¿O Funq se establece como predeterminado DependencyResolver en otro lugar?

+0

El impl de FunqControllerFactory podría ayudar aquí: https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.FluentValidation.Mvc3/Mvc /FunqControllerFactory.cs se usa en SocialBootstrapApi aquí: https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/App_Start/AppHost.cs#L131 no hay otra integración de IOC con MVC + Funq que FunqControllerFactory – mythz

Respuesta

9

Func y AutoFac pueden funcionar juntos. Con ServiceStack, instruye a func para que use un adaptador AutoFac. Esta página aquí le dice cómo usar diferentes contenedores de IoC. Incluso proporciona el código para una clase AutofacIocAdapter. https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container

public class AutofacIocAdapter : IContainerAdapter 
{ 
    private readonly IContainer _container; 

    public AutofacIocAdapter(IContainer container) 
    { 
     _container = container; 
    } 

    public T Resolve<T>() 
    { 
     return _container.Resolve<T>(); 
    } 

    public T TryResolve<T>() 
    { 
     T result; 

     if (_container.TryResolve<T>(out result)) 
     { 
      return result; 
     } 

     return default(T); 
    } 
} 

Luego, en el método apphost Configurar (contenedor de contenedores) que necesita para que este adaptador:

//Create Autofac builder 
var builder = new ContainerBuilder(); 
//Now register all depedencies to your custom IoC container 
//... 

//Register Autofac IoC container adapter, so ServiceStack can use it 
IContainerAdapter adapter = new AutofacIocAdapter(builder.Build()) 
container.Adapter = adapter; 
Cuestiones relacionadas