Внедрение зависимостей контейнера .NET IoC Unity

1

В настоящее время у меня есть webapi, с которым я пытаюсь реализовать Injection Dependency. В моем webapi у меня есть уровень репозитория, который взаимодействует с базой данных и уровнем сервиса, который просто хранит всю бизнес-логику. Контроллеры - это просто слой обработчика запросов.

В архитектуре webapi я получил, кто сделал запрос от обработчиков (до достижения уровня контроллера). Я хотел бы добавить это в мой репозиторий, используя DI и IoC Unity. Есть ли способ, которым я могу это сделать. Возможно, фабрики, использующие Unity Container.

Благодарю.

Теги:
dependency-injection
asp.net-web-api

1 ответ

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();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню