2014-12-02 155 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(); 
}