2012-09-08 13 views
5

In der AppHost-Klasse verwenden alle Methodenüberschreibungen den Funq-Container. Ich benutze Autofac innerhalb meiner ASP.NET MVC App (ich betreibe SS Seite an Seite mit meiner MVC App).ServiceStack Funq IoC-Ersatz

  1. Gibt es eine Möglichkeit, diese Autofac-Registrierung von global.asax.cs eher zu verwenden oder ist das ein Overkill zu ersetzen?
  2. I auf Kommentar dieser Linie in AppHost

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

weil es mit meinen Autofac betriebenen Controllern versaut war. Ist das ausreichend, um zu verhindern, dass Autofac und Funq Probleme in meiner App haben? Oder stellt sich Funq als Standard DependencyResolver woanders hin?

+0

Die impl von FunqControllerFactory könnte hier helfen: https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.FluentValidation.Mvc3/Mvc /FunqControllerFactory.cs wird in SocialBootstrapApi hier verwendet: https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/App_Start/AppHost.cs#L131 Es gibt keine andere IOC-Integration mit MVC + Funq als die FunqControllerFactory – mythz

Antwort

9

Func und AutoFac können zusammenarbeiten. Mit ServiceStack weisen Sie func an, einen AutoFac-Adapter zu verwenden. Auf dieser Seite erfahren Sie, wie Sie verschiedene IoC-Container verwenden. Es bietet sogar den Code für eine AutofacIocAdapter Klasse. 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); 
    } 
} 

Dann im AppHost Configure (Container Container) -Methode müssen Sie diesen Adapter aktivieren:

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