Zastanawiam się, jaki jest najlepszy sposób przekazywania kontekstu między klasami. Czy powinienem używać parametru ref lub po prostu przekazać kontekst jako parametr? Najlepiej konstruktorowi, ale w przypadku metody statycznej, jakie jest najlepsze podejście? To znaczy. Wydajność, bezpieczeństwo, projektowanie itp. Czy udało się osiągnąć wydajność jako parametr? Czy możliwe są konflikty, jeśli różne wątki pracują nad kontekstem w tym samym czasie, gdy używasz referencji?Przekazywanie kontekstu podmiotu do innych metod i obiektów
Main.cs
static void Main(string[] args)
{
var context = new MyEntities();
var myClass = new MyClass(context);
myClass.AddPerson();
// or
Person.AddPerson(ref context);
}
MyClass.cs
public class MyClass
{
public void MyClass(MyEntities context) { }
public void AddPerson()
{
context.People.AddObject(new Person());
}
}
MySecondClass.cs
public partial class Person
{
public static AddPerson(ref MyEntities context)
{
// Do something
}
}
Nie ma problemu ani wydajności w przypadku przejęcia kontekstu struktury obiektu jako zwykłego parametru. Po prostu upewnij się, że w końcu jest Disposed. – Andrei
Klasa kontekstu nie jest bezpieczna dla wątków, więc musisz spodziewać się problemów, jeśli używasz kontekstu w wielu wątkach, bez względu na to, czy przekazujesz go z lub bez modyfikatora 'ref'. Trzeba samemu zapewnić bezpieczeństwo gwintów poprzez ręczną synchronizację nici (za pomocą 'blokady' itp.). Lepiej unikaj używania kontekstu w różnych wątkach, jeśli naprawdę tego nie potrzebujesz. – Slauma