2012-09-08 29 views
5

Trong lớp AppHost, tất cả ghi đè phương thức sử dụng vùng chứa Funq. Tôi sử dụng Autofac trong ứng dụng ASP.NET MVC của tôi (tôi chạy SS side-by-side với ứng dụng MVC của tôi).Thay thế ServiceStack Funq IoC

  1. Có cách nào thay vì sử dụng đăng ký Autofac đó từ global.asax.cs hoặc đây có phải là quá mức cần thiết để thay thế không?
  2. Tôi nhận xét ra dòng này trong AppHost

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

vì nó đang gây rối với bộ điều khiển được hỗ trợ Autofac của tôi. Điều này có đủ để ngăn chặn Autofac và Funq gặp sự cố trong ứng dụng của tôi không? Hay Funq đặt chính nó làm mặc định DependencyResolver ở bất kỳ nơi nào khác?

+0

Các impl của FunqControllerFactory có thể giúp đỡ ở đây: https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.FluentValidation.Mvc3/Mvc /FunqControllerFactory.cs được sử dụng trong SocialBootstrapApi tại đây: https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/App_Start/AppHost.cs#L131 không có tích hợp IOC nào khác với MVC + Funq hơn FunqControllerFactory – mythz

Trả lời

9

Func và AutoFac có thể hoạt động cùng nhau. Với ServiceStack, bạn hướng dẫn func sử dụng bộ điều hợp AutoFac. Trang này ở đây cho bạn biết cách sử dụng các thùng chứa IoC khác nhau. Nó thậm chí còn cung cấp mã cho lớp học 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); 
    } 
} 

Sau đó, trong phương pháp AppHost Configure (container container), bạn cần phải kích hoạt bộ chuyển đổi này:

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

Câu trả lời được chấp nhận không xử lý autofac mỗi yêu cầu container đứa trẻ, được sử dụng rộng rãi. Xem ở đây cho một IContainerAdapter thay thế có quyền này:

https://stackoverflow.com/a/15436254/7450

Các vấn đề liên quan