В настоящее время у меня есть webapi, с которым я пытаюсь реализовать Injection Dependency. В моем webapi у меня есть уровень репозитория, который взаимодействует с базой данных и уровнем сервиса, который просто хранит всю бизнес-логику. Контроллеры - это просто слой обработчика запросов.
В архитектуре webapi я получил, кто сделал запрос от обработчиков (до достижения уровня контроллера). Я хотел бы добавить это в мой репозиторий, используя DI и IoC Unity. Есть ли способ, которым я могу это сделать. Возможно, фабрики, использующие Unity Container.
Благодарю.
Вот как я это реализую, когда пытаюсь 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();
}