Skip to content

Instantly share code, notes, and snippets.

View mirmostafa's full-sized avatar
🧗‍♂️
Coding is my lifestyle. But I live in Iran 😢

Mohammad Mirmostafa mirmostafa

🧗‍♂️
Coding is my lifestyle. But I live in Iran 😢
View GitHub Profile
@mirmostafa
mirmostafa / Directory.Packages.props
Created June 12, 2024 12:49
Best practice for `Directory.Packages.props` by .NET 9.0
<Project>
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<LangVersion>preview</LangVersion>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<GenerateRequiresPreviewFeaturesAttribute>true</GenerateRequiresPreviewFeaturesAttribute>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>Preview</LangVersion>
@mirmostafa
mirmostafa / Directory.Build.props
Created June 12, 2024 12:46
Build acceleration
<Project>
<!--
This Directory.Build.props files sets default properties that apply to all projects found in
this folder or subfolders, recursively.
-->
<PropertyGroup>
<!-- Enable Build Acceleration in Visual Studio. -->
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
<!--
@mirmostafa
mirmostafa / sample.cs
Created March 2, 2024 13:33
Pattern Matching - Variable
bool? isOk = dbResult is not null and { Found: true, HasAccess: var hasAccess } ? has Access : null;
@mirmostafa
mirmostafa / EnumerableHelper.cs
Created March 28, 2023 06:59
Mix of Iterator Patteren and Pattern Matching
public static IEnumerable<T> AddRangeImmuted<T>(this IEnumerable<T>? source, IEnumerable<T>? items)
{
return (source, items) switch
{
(null, null) => Enumerable.Empty<T>(),
(_, null) => source,
(null, _) => items,
(_, _) => addRangeImmutedIterator(source, items)
};
static IEnumerable<T> addRangeImmutedIterator(IEnumerable<T> source, IEnumerable<T> items)
@mirmostafa
mirmostafa / .editorconfig
Last active February 10, 2023 14:58
My preferred editorconfig
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
# C# files
[*.cs]
#### Core EditorConfig Options ####
# Indentation and spacing
indent_size = 4
@mirmostafa
mirmostafa / startup.cs
Last active February 17, 2024 11:38
Add IoC and Mock DB to xunit test
public static void ConfigureServices(IServiceCollection services)
{
services.AddUnitTestServices();
var result = services.BuildServiceProvider();
DI.Initialize(result);
InitializeDatabase();
}
private static void InitializeDatabase()
{
var db = DI.GetService<InfraWriteDbContext>();
@mirmostafa
mirmostafa / IsNullOrEmpty-SingleMethod.cs
Created July 30, 2022 08:26
IsNullOrEmpty, using pattern matching
public static bool IsNullOrEmpty([NotNullWhen(false)] this string? str) => str?.Length is null or 0;
public static bool IsNullOrEmpty([NotNullWhen(false)] this string? str) => str is null or { Length: 0 };
@mirmostafa
mirmostafa / Program.cs
Created July 23, 2022 04:28
Use Autofac in Blazor server-side
using Autofac;
using Autofac.Extensions.DependencyInjection;
using HanyCo.Infra;
using Library.Cqrs;
using Library.Mapping;
namespace BlazorApp;
@mirmostafa
mirmostafa / 1_Monad.cs
Created July 21, 2022 08:57
Simple Monad Design Pattern in C#
public class Monad<TValue>
{
private readonly TValue? _value;
public Monad(TValue? value)
=> this._value = value;
public Monad<TResult?> AnyWay<TResult>(in Func<TValue?, TResult?> func)
=> new(func(this._value));
@mirmostafa
mirmostafa / PredicateBuilder.cs
Created April 20, 2022 15:09
Dynamically Composing Expression Predicates
using System.Linq.Expressions;
namespace Library.Data.Linq;
//! Reference: http://www.albahari.com/nutshell/predicatebuilder.aspx
public static class PredicateBuilder
{
public static Expression<Func<T, bool>> True<T>() => f => true;
public static Expression<Func<T, bool>> False<T>() => f => false;