2012-09-08 87 views
5

在AppHost類中,所有方法覆蓋都使用Funq容器。我在我的ASP.NET MVC應用程序中使用Autofac(我與我的MVC應用程序並排運行SS)。ServiceStack Funq IoC替換

  1. 有沒有一種辦法,而使用Autofac從註冊或的global.asax.cs這是矯枉過正,以取代?
  2. 我在APPHOST註釋這一行

    //ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(容器));

因爲它搞亂了我的Autofac動力控制器。這足以防止Autofac和Funq在我的應用程序中出現問題嗎?還是Funq將自己設置爲其他地方的默認DependencyResolver

+0

FunqControllerFactory的IMPL可能有助於在這裏:​​https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.FluentValidation.Mvc3/Mvc /FunqControllerFactory.cs在SocialBootstrapApi中使用它:https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/App_Start/AppHost.cs#L131沒有其他IOC與MVC + Funq集成比FunqControllerFactory – mythz

回答

9

Func和AutoFac可以一起工作。使用ServiceStack指示func使用AutoFac適配器。這裏的這個頁面告訴你如何使用不同的IoC容器。它甚至提供了一個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); 
    } 
} 

然後在APPHOST配置(集裝箱貨櫃)方法,你需要啓用這個適配器:

//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; 
相關問題