2014-12-02 149 views
1

我目前有一個webapi,我試圖實現依賴注入。在我的webapi中,我有一個與數據庫通信的存儲庫層和一個只存儲所有業務邏輯的服務層。控制器只是一個請求處理程序層。NET IoC統一容器依賴注入

在webapi體系結構中,派生出處理程序的請求(在到達控制器層之前)。我想使用DI和IoC Unity將其注入到我的存儲庫中。有沒有辦法可以做到這一點。也許工廠使用Unity Container。

謝謝。

回答

1

這是我如何實現它,當我嘗試將OrmLiteConnectionFactory注入一個Repository類:

的Global.asax

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     //Setup DI 
     Bootstrapper.Initialise(); 

     // other init 
    } 
} 

Bootstrapper.cs

public static class Bootstrapper 
{ 
    public static void Initialise() 
    { 
     var container = BuildUnityContainer(); 
     GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 
    } 

    private static IUnityContainer BuildUnityContainer() 
    { 
     var container = new UnityContainer(); 

     // register all your components with the container here 
     // e.g. container.RegisterType<ITestService, TestService>(); 

     string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     var connectionFactory = new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider); 
     var connectionFactoryConstructor = new InjectionConstructor(connectionFactory); 

     container.RegisterType<ConfigManagement.Domain.Core.IParameterValueRepository, ConfigManagement.DAL.Core.ParameterValueRepository>(connectionFactoryConstructor); 

     return container; 
    } 
} 

Repository執行:

public class ParameterValueRepository : IParameterValueRepository 
{ 
    private readonly OrmLiteConnectionFactory _dbFactory; 

    public ParameterValueRepository(OrmLiteConnectionFactory dbFactory) 
    { 
     _dbFactory = dbFactory; 
    } 
} 

最後我Repository接口:

public interface IParameterValueRepository 
{ 
    List<ParameterValue> Get(); 
}