Паттерн UnitOfWork с инжекцией Depedency в ядре asp.net

61
3

Я хочу переместить мой проект в базовую структуру ASP.NET. Я новичок в ядре asp.net, поэтому не знаю, как работать с шаблоном UnitOfWork. Когда я работал с asp.net mvc, я разделил решение на 3-уровневую архитектуру (слои DAl, BLL, WEB). В уровне BLL я использовал инъекцию Ninject, поэтому мне не нужно было добавлять ссылку на DLL из моего WEB-слоя.

public class ServiceModule : NinjectModule
{
private string connectionString;
public StandardKernel _kernel;
IUnitOfWork uow;
public ServiceModule(string connection)
{
connectionString = connection;
uow = new EFUnitOfWork(connectionString);
}
public override void Load()
{
Bind<IUnitOfWork>().To<EFUnitOfWork>().WithConstructorArgument(connectionString);
}
}

Но все учебники говорят, что приложения ASP.NET Core должны использовать метод core injection в методе ConfigureServices (WEB-layer):

services.AddTransient<IUnitOfWork, EFUnitOfWork>();

Однако, это плохая идея добавить ссылку, чтобы добавить ссылку на слой DAL из WEB.

Итак, что мне делать? Добавить ссылку (не так ли) или изменить мою структуру? Или что-то еще?

спросил(а) 2018-03-21T17:28:00+03:00 3 года назад
1
Решение
62

Вы можете использовать метод расширения и поместить его в свою библиотеку BLL:

namespace Microsoft.Extensions.DependencyInjection
{
public static class BllServiceCollectionExtensions
{
public static IServiceCollection AddBll(this IServiceCollection services)
{

services.AddTransient<IUserService, UserService>();
services.AddTransient<ITransactionService, TransactionService>();
}
}
}

в вашем веб-проекте вы можете добавить его в свой Startup.cs, как это

public void ConfigureServices(IServiceCollection services)
{
...
serivices.AddBll();
...
}

ответил(а) 2018-03-21T19:07:00+03:00 3 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема