Паттерн UnitOfWork с инжекцией Depedency в ядре asp.net
Я хочу переместить мой проект в базовую структуру 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.
Итак, что мне делать? Добавить ссылку (не так ли) или изменить мою структуру? Или что-то еще?
Вы можете использовать метод расширения и поместить его в свою библиотеку 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();
...
}
- Вопросы
- Entity-framework-core
- Паттерн UnitOfWork с инжекцией Depedency в ядре asp.net