2012-09-08 11 views
5

Nella classe AppHost tutte le sostituzioni del metodo utilizzano il contenitore Funq. Uso Autofac all'interno della mia app ASP.NET MVC (eseguo SS side-by-side con la mia app MVC).ServiceStack Funq Sostituzione di IoC

  1. C'è un modo per utilizzare piuttosto la registrazione di Autofac da global.asax.cs o è un overkill da sostituire?
  2. ho commentato questa linea in AppHost

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

perché era un problema con i miei controller alimentati da Autofac. È sufficiente per impedire a Autofac e Funq di avere problemi nella mia app? Oppure Funq si imposta come predefinito DependencyResolver altrove?

+0

L'impl di FunqControllerFactory potrebbe aiutare qui: https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.FluentValidation.Mvc3/Mvc /FunqControllerFactory.cs utilizzato in SocialBootstrapApi qui: https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/App_Start/AppHost.cs#L131 non esiste altra integrazione IOC con MVC + Funq rispetto a FunqControllerFactory – mythz

risposta

9

Func e AutoFac possono funzionare insieme. Con ServiceStack istruisci la funzione per utilizzare un adattatore AutoFac. Questa pagina qui ti spiega come utilizzare diversi contenitori IoC. Fornisce anche il codice per una classe 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); 
    } 
} 

Poi nel metodo AppHost Configure (Contenitore) è necessario attivare questo adattatore:

//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;