При запуске ide, сначала нужно собрать: shift + f10, следом каждый раз мне нужно нажимать ctrl + f5.
В гугле file watcher - там я могу указать только путь до .exe файла, это не то.
И как эти scoped объеты существуют в background сервисах?
"Создается один объект при его запросе в рамках некой области, например http запроса, и в последующем выдается уже созданный в рамках этой области". Часто получал утверждение что неправильно, и непонятно что за область
Scoped
For web applications, a scoped lifetime indicates that services are created once per client request (connection). Register scoped services with AddScoped.
In apps that process requests, scoped services are disposed at the end of the request.
When using Entity Framework Core, the AddDbContext extension method registers DbContext types with a scoped lifetime by default.
Note
Do not resolve a scoped service from a singleton and be careful not to do so indirectly, for example, through a transient service. It may cause the service to have incorrect state when processing subsequent requests. It's fine to:
- Resolve a singleton service from a scoped or transient service.
- Resolve a scoped service from another scoped or transient service.
By default, in the development environment, resolving a service from another service with a longer lifetime throws an exception. For more information, see Scope validation.
The integer nearest a. If the fractional component of a is halfway between two integers, one of which is even and the other odd, then the even number is returned. Note that this method returns a Double instead of an integral type.
Math.Round(4.5, MidpointRounding.ToEven);
Math.Round(4.5, MidpointRounding.ToZero);
Math.Round(4.5, MidpointRounding.AwayFromZero);
Math.Round(4.5, MidpointRounding.ToNegativeInfinity);
Math.Round(4.5, MidpointRounding.ToPositiveInfinity);
class User
{
IService _service;
// DI
User(IService service)
{
_service = service;
}
}
.getService("UserService")
и он сам понимает какой сервис ты хочешь, какая у него реализация и как его создать (возможно для него нужны другие зависимости)// DI-контейнер
var container = new DependencyContainer();
container.Register(typeof(IService), new ConcreteService());
var service = container.Get<IService>();
// Сервис-локатор
class ServiceRegistry
{
IService Service;
static IService GetService()
{
return Service;
}
}
class User
{
void DoSomething()
{
var service = ServiceRegistry.GetService();
service.MakeStuff();
}
}
function ping(url, fn) {
fetch(url);
setTimeout(fn, 10000, url, fn);
}
ping("https://google.com", ping);
function ping(url, fn) {
fetch(url).then((response) => {
setTimeout(fn, 10000, url, fn);
});
}
ping("https://google.com", ping);
/// <summary>
/// Класс [де]сериализуемый MemoryPack
/// <br />Необходим для добавления всем наследуемым классам метода сериализации через расширение
/// <br />Наследование данного метода не работает из-за каста в целевой класс
/// </summary>
public class Packable { }
/// <summary>
/// Расширение для [де]сериализуемых классов MemoryPack
/// </summary>
public static class PackableExtension
{
/// <summary>
/// Сериализовать класс в массив байтов
/// </summary>
/// <typeparam name="T">Целевой класс</typeparam>
/// <param name="data">Объект целевого класса</param>
/// <returns></returns>
public static byte[] Pack<T>(this T data) where T : Packable
=> MemoryPackSerializer.Serialize(data);
/// <summary>
/// Десериализовать класс из массива байтов
/// </summary>
/// <typeparam name="T">Целевой класс</typeparam>
/// <param name="data">Массив байт</param>
/// <returns></returns>
public static T Unpack<T>(this byte[] data) where T : Packable
=> MemoryPackSerializer.Deserialize<T>(data);
}