Od pewnego czasu w swoich projektach do dependency injection używam mega uproszczonej wersji ServiceLocator. Wygląda to mniej więcej tak (c#)

internal abstract class IServices

{

public virtual Collaborator Collaborator { get; protected set; };

...

}


internal class Services : IServices

{

public Services()

{

base.Collaborator = new Collaborator(); //(*)

}

}


internal class XXX /// jakaś fajna skrótowa nazwa projektu

{

public static IServices Services = new Services();

}


//(*) to
@sasik520: Nie znam Twoich wymagań, ale dajmy prosty przykład:
Serwis A używa Serwisu B.
Jak to rozwiązujesz? Strzelam, że masz tam po prostu

class A
{
public void DoSomething()
{
ServiceLocator.B.DoSomethingElse();
//some code here
}
}

Co ma poważną wadę - ukrywasz zależności. Na pierwszy rzut oka nie widać, że A zależy od B (jakby to było w standardowym DI - A prawdopodobnie przyjmowałby B jako parametr konstruktora).
Edit. widzę, że
Cześć Mirki
Mam problem z MVC z C#.
Mam taką klasę przechowującą dane:
KlasaDane
{
public Id {get;set;}
public Tekst {get;set;}
}
Taki enum, w którym przekazuje dodatkowe info:
Enum Stan
{
EDYCJA,
COSTAM
}
I taką klasę, którą używam podczas tworzenia różnych widoków:
KlasaDoWidoku
{
KlasaDane obiektDane;
Stan stan;
//dodatkowe różne pola ...
}
Jeśli w widoku wypełniam np. formę do edycji danych to korzystam @Html.EditFor(model => model.obiektDane.Tekst) i to
@ogrod87: Myślałem nad tym, ale biorąc pod uwagę treści pod #programowanie czy każdym innym tagiem (Martwię się tylko o #sql, bo go nie śledzę. Może ten jest merytoryczny), to wychodzę z założenia, że kilka artykułów nikomu nie zaszkodzi.

A jak komuś przeszkadza, to przecież mamy od programistów Wykopu działające czarne listy ( ͡° ͜ʖ ͡°)
@Hoff: Wydaje mi się, że to akurat jest dosyć przydatne.
Wiadomo, że C# nigdy nie będzie tak szybki jak C++, ale alokowanie cały czas nowych tablic, a potem zbieranie ich przez GC jest dosyć czasochłonne.

I Slice powinien być traktowany jak tablica pod spodem (w innym przypadku nie widzę sensu, jeśli nie mogę przekazać Slice'a jako zwykłej tablicy do funkcji) i GC nie powinien czyścić oryginalnej tablicy, dopóki Slice istnieje.

Pomijając
Hej Mirrrki. Czy jest na pokładzie ktoś kto choć trochę orientuje się w temacie Xamarina?

Otóż, na stronie jest napisane że w pierwszym pakiecie (25$ miesięcznie) nie ma dostępu do Xamarina z poziomu VS, dopiero od 1k $ rocznie. Ale.. uruchamiając VS 2015, tworząc nowy projekt można za darmo utworzyć projekt, zbudować aplikację itp.. O co więc chodzi? Jakieś ukryte ograniczenia w związku z?

#xamarin #csharp
Mam aplikację, w której mam RESTowe api, oraz apkę na Androida. Użyszkodnik loguje się w apce na androida, i tam to działa ok - tylko nie wiem, jak autoryzować operacje po stronie API. Powinienem przekazywać token uzyskany przy logowaniu i go walidować po stronie serwera, czy to może jakaś większa magia?

#programowanie #csharp #dotnet
#programowanie #csharp

Unit testy (testy jednostkowe). Moja klasa A polega na bezpośrednich informacjach obiektu klasy B (z zewnętrznej biblioteki). Np:

if(b.jakieśPoleTylkoDoOdczytu)
...

W tym układzie wszystko jest jasne i proste. Potrzebuje jednak wykonać unit testy mojej klasy A, które zależne są bezpośrednio od B. Nie powinno się jednak mockować (przepraszam jeśli inaczej się to odmienia) klas - w tym wypadku B. Czy powinienem wszystkie relacje pomiędzy A i B przenieść jakoś na
@meetom: W takim razie chyba nie zdążyłeś skomentować. Usunąłem wpis, żeby nie angażować innych, bo już zrozumiałem temat, ale dziękuję w takim razie :D Co do PW, to niczego nie blokowałem.
Tworzysz interfejs IDictionary, aby potem implementować go w klasie abstrakcyjnej DictionaryBase, aby następnie stworzyć swoją własną klasę (słownik) która będzie dziedziczyć od tegoż DictionaryBase. Po drodze oczywiście bawiąc się w implementowanie wszystkich metod i właściwości.

Rozumiem, że nadejście typów generycznych zostało przyjęte ciepło?

#csharp
Hej Mirki! Potrzebuję zrobić aplikację na androida, taka tam mini społecznościówka. Wykorzystam do tego C# z Xamarinem.
Jako że w androidzie będę pisał pierwszy raz, a w webie (php, asp.net, python) siedzę już parę ładnych latek, pomyślałem żeby zrobić stronę, responsywny design itp, a w aplikacji po prostu wyświetlić tą o to stronę (web view). Oczywiście funkcje takie jak powiadomienia w trayu itp zrobiłbym normalnie. W ten o to sposób zaoszczędziłbym mega
@PanKamil907: wiesz, jakbyś chciał, to możesz przepchnąć taką appkę po kłótniach z Google lub przy szczęściu, że nie zbanują, ale druga sprawa to wydajność. Mam responsywny chat w ajaxie i opóźnienie to 30 sekund po każdej akcji ;)
W androidzie nie będziesz miał dużo roboty:
baza danych < plik php > android (webservices), to jest android woła plik php, on przekazuje do bazy, w drugą stronę plik php przekazuje wartość json
@Phallusimpudicus: nie to zupełnie co innego. var to tylko syntax sugar, który pozwala na łatwiejsze pisanie kodu na przykład zamiast pisać:

CustomerService cs = new CustomerService();
return cs.GetCustomers();

piszesz po prostu:

var cs = new CustomerService();
return cs.GetCustomers();

pod var w tym wypadku będzie się mieściło tak naprawdę CustomerService.
Dla odmiany z object będzie tak:

object cs = new CustomerService();
return cs.GetCustomers(); //ERROR błąd kompilacji!
@Zeronader: Cytat akurat nie był do Ciebie, tylko z doświadczenia.

Podziel tą operację na dwie linijki.
Zamiast 20, możesz zrobić np. const int maxDescriptionLength = 20 i zmiennej użyć w pierwszej linijce.

const int maxAllowedDescriptionLength = 20;
string crimeDescritpion = description;

if(crimeDescritpion .Length > maxAllowedDescriptionLength) //Tu można dodać zabezpieczeni o nulla
{
crimeDescription = description.Substring(0,maxAllowedDescriptionLength -1);

}

return $"{CrimePlace}...";


I tak siadając za pół roku do kodu wiesz już o co
Powiedzmy, że ma 10 TextBlocków TB0..TB9 i jednowymiarową tablicę z wartościami całkowitymi. Chciałbym wypisać poszczególne wartości w odpowiednich TextBlockach, tak aby nr TB zgadzał się z indeksem tablicy. Użył bym do tego pętli for, ale nie wiem jak sprawić by nazwa TextBloacka zmieniała się podczas działania pętli.
Chodzi mi o miej więcej coś takiego:

for(int i=0; i<tab.Length; i++)
{
TB[i].Text = tab[i].ToString();
}

#programowanie #csharp #wpf