TakasakiStudio.Lina.AspNet 2.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package TakasakiStudio.Lina.AspNet --version 2.0.3                
NuGet\Install-Package TakasakiStudio.Lina.AspNet -Version 2.0.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TakasakiStudio.Lina.AspNet" Version="2.0.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TakasakiStudio.Lina.AspNet --version 2.0.3                
#r "nuget: TakasakiStudio.Lina.AspNet, 2.0.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install TakasakiStudio.Lina.AspNet as a Cake Addin
#addin nuget:?package=TakasakiStudio.Lina.AspNet&version=2.0.3

// Install TakasakiStudio.Lina.AspNet as a Cake Tool
#tool nuget:?package=TakasakiStudio.Lina.AspNet&version=2.0.3                

Lina

A framework to simplify application creation by improving dependency injection, validation, config and database handling

Features

  • Config
    • Easy load
    • Auto inject
  • Database
    • Auto inject
    • Auto import configuration
    • Easy configuration
  • Validation
    • Fluent api
    • Reliable library
    • Easy usage
  • Dependency Injection
    • Life time configurable
    • Easy manipulation
    • Services, Repositories, HttpClient and more types of preconfigured dependencies

Example simple usage

using Config.Net;
using TakasakiStudio.Lina.AutoDependencyInjection;
using TakasakiStudio.Lina.AutoDependencyInjection.Attributes;
using TakasakiStudio.Lina.Utils.LoaderConfig;
using Microsoft.Extensions.DependencyInjection;

var serviceCollection = new ServiceCollection();

serviceCollection.AddLoaderConfig<IAppConfig>();
serviceCollection.AddAutoDependencyInjection<Program>();

var services = serviceCollection.BuildServiceProvider();

services.GetRequiredService<IFooService>().PrintAppName();

public interface IFooService 
{
    public void PrintAppName();
}

[Service<IFooService>]
public class FooService : IFooService
{
    private readonly IAppConfig _appConfig;
    
    public FooService(IAppConfig appConfig)
    {
        _appConfig = appConfig;
    }
    
    public void PrintAppName()
    {
        Console.WriteLine(_appConfig.AppName);
    }
}

public interface IAppConfig 
{
    [Option(DefaultValue = "Test")]
    public string AppName { get; }
}

Config example usage

using Config.Net;
using TakasakiStudio.Lina.Utils.LoaderConfig;
using Microsoft.Extensions.DependencyInjection;

var serviceCollection = new ServiceCollection();

var config = serviceCollection.AddLoaderConfig<IAppConfig>();

Console.WriteLine(config.AppName); // instant use

var services = serviceCollection.BuildServiceProvider();

Console.WriteLine(services.GetRequiredService<IAppConfig>().AppName); // DI usage

public interface IAppConfig 
{
    [Option(DefaultValue = "Test")]
    public string AppName { get; }
}

Database example usage

using Config.Net;
using TakasakiStudio.Lina.Database;
using TakasakiStudio.Lina.Database.Models;
using TakasakiStudio.Lina.Utils.LoaderConfig;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.Extensions.DependencyInjection;

var serviceCollection = new ServiceCollection();

var config = serviceCollection.AddLoaderConfig<IAppConfig>();
serviceCollection.AddLinaDbContext<Program>((builder, assembly) =>
    builder.UseMySql(config.DatabaseUrl, ServerVersion.AutoDetect(config.DatabaseUrl),
        optionsBuilder => optionsBuilder.MigrationsAssembly(assembly)));

public interface IAppConfig 
{
    [Option(DefaultValue = "Server=localhost;Database=test;User Id=root;Password=root;")]
    public string DatabaseUrl { get; }
}

public class User : BaseEntity<int>
{
    public string Name { get; set; } = string.Empty;
}

public class UserConfiguration : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> builder)
    {
        builder.ToTable("Users");
        builder.HasKey(x => x.Id);
        builder.Property(x => x.Name).IsRequired();
    }
}

Validation example usage

using FluentValidation;
using TakasakiStudio.Lina.Common;
using TakasakiStudio.Lina.Database.Models;

var user = new User()
{
    Name = ""
};

if (!await user.IsValid())
{
    Console.WriteLine("invalid");
}

user.Name = "Foo";

await user.Validate();

Console.WriteLine("Valid");

public class User : BaseValidateBaseEntity<User, UserValidation, int>
{
    public string Name { get; set; } = string.Empty;
}

public class UserValidation : AbstractValidator<User>
{
    public UserValidation()
    {
        RuleFor(x => x.Name).NotEmpty();
    }
}

public record UserViewModel() : BaseValidationRecord<UserViewModel, UserViewModelValidation>
{
    public string Name { get; set; } = string.Empty;
}

public class UserViewModelValidation : AbstractValidator<UserViewModel>
{
    public UserViewModelValidation()
    {
        RuleFor(x => x.Name).NotEmpty();
    }
}

Dependency injection example usage

using Config.Net;
using FluentValidation;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.Extensions.DependencyInjection;
using TakasakiStudio.Lina.AutoDependencyInjection;
using TakasakiStudio.Lina.AutoDependencyInjection.Attributes;
using TakasakiStudio.Lina.Common;
using TakasakiStudio.Lina.Database;
using TakasakiStudio.Lina.Database.Interfaces;
using TakasakiStudio.Lina.Database.Models;
using TakasakiStudio.Lina.Database.Repositories;
using TakasakiStudio.Lina.Utils.LoaderConfig;

var serviceCollection = new ServiceCollection();

var config = serviceCollection.AddLoaderConfig<IAppConfig>();
serviceCollection.AddAutoDependencyInjection<Program>();
serviceCollection.AddLinaDbContext<Program>((builder, assembly) =>
    builder.UseMySql(config.DatabaseUrl, ServerVersion.AutoDetect(config.DatabaseUrl),
        optionsBuilder => optionsBuilder.MigrationsAssembly(assembly)));

public interface IAppConfig
{
    [Option(DefaultValue = "Server=localhost;Database=test;User Id=root;Password=root;")]
    public string DatabaseUrl { get; }
}

public class User : BaseValidateBaseEntity<User, UserValidation, int>
{
    public string Name { get; set; } = string.Empty;

    public static implicit operator User(UserViewModel viewModel)
    {
        return new User
        {
            Name = viewModel.Name
        };
    }

    public static implicit operator UserViewModel(User user)
    {
        return new UserViewModel
        {
            Name = user.Name
        };
    }
}

public class UserValidation : AbstractValidator<User>
{
    public UserValidation()
    {
        RuleFor(x => x.Name).NotEmpty();
    }
}

public class UserConfiguration : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> builder)
    {
        builder.ToTable("Users");
        builder.HasKey(x => x.Id);
        builder.Property(x => x.Name).IsRequired();
    }
}

public record UserViewModel : BaseValidationRecord<UserViewModel, UserViewModelValidation>
{
    public string Name { get; set; } = string.Empty;
}

public class UserViewModelValidation : AbstractValidator<UserViewModel>
{
    public UserViewModelValidation()
    {
        RuleFor(x => x.Name).NotEmpty();
    }
}

public interface IUserRepository : IBaseRepository<User, int>
{
}

[Repository<IUserRepository>]
public class UserRepository : BaseRepository<User, int>, IUserRepository
{
    public UserRepository(DbContext dbContext) : base(dbContext)
    {
    }
}

public interface IUserService
{
}

[Service<IUserService>]
public class UserService : IUserService
{
    private readonly IUserRepository _userRepository;

    public UserService(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public async Task<UserViewModel?> Add(UserViewModel userViewModel)
    {
        if (!await userViewModel.IsValid()) throw new Exception("Not valid");

        User user = userViewModel;
        await user.Validate();

        await _userRepository.Add(user);
        await _userRepository.Commit();

        return user;
    }
}

Libraries usage

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.3.0 76 11/18/2024
2.2.1 242 10/17/2024
2.2.0 275 10/9/2024
2.1.7 95 10/2/2024
2.1.6 313 8/30/2024
2.1.5 289 7/19/2024
2.1.4 110 6/27/2024
2.1.3 112 6/5/2024
2.1.2 171 5/15/2024
2.1.1 101 5/13/2024
2.0.13 86 5/13/2024
2.0.12 145 5/5/2024
2.0.11 109 5/5/2024
2.0.10 127 4/13/2024
2.0.9 161 3/31/2024
2.0.8 128 3/18/2024
2.0.7 120 3/17/2024
2.0.6 352 2/22/2024
2.0.5 152 2/14/2024
2.0.4 133 2/7/2024
2.0.3 163 1/21/2024
2.0.2 192 11/28/2023
2.0.1 142 11/23/2023
2.0.0 137 11/22/2023