Wpis z mikrobloga

Czy można w .net core za pomocą statycznej metody dodać sobie do kontenera tej klasy coś w tylu
- klucz -> wartość, gdzie wartość jest nazwą innej klasy, która będzie wykorzystywana do wstrzykiwania np. w serwisie?

Na chwilę obecną mam tak, że metoda sama tworzy te instancje poprzez new, ale przez to nie działa mi dobrze kontener DI i w innych miejscach gdzie wykorzystuje obiekt tej kasy, wywala null reference

#csharp #programowanie #programista15k #aspnet
  • 5
@pepepanpatryk: A nie można np factory jakiegoś użyć?

np zamiast var whatever = new Whateverclass(runtimedependencyparam1, runtimedependencyparam2);
Wstrzyknąć jakiś interfejs który ma metodę CreateWhatever(param1, param2)?
Dzięki temu możesz sobie dowolnie zamockować tę metodę.
wywala null reference


@pepepanpatryk: skoro masz null reference i wstrzykujesz instancję do jednej klasy to musisz wstrzyknąć i do innych klas które wymagają tej klasy

Jeżeli chcesz skorzystać z DI, to możesz psrawdzić StructureMap, on wspiera podejście klucz -> wartość
Zgadza się zamotałem.
Już wyjaśniam.

W klasie Startup "rejestruje" sobie pewne typy:

WebSocketHandler.AddHandler("/api/chat");
oznacza to, że pod adresem /api/chat będzie działał ChatHandler.

Mapowanie w klasie WebSocketHandler wygląda tak:

public static void AddHandler(string path) where T: new()
{
var handler = new T() as IWebSocketHandler;
handlers.Add(path, handler);
}

jednakże klasa ChatHandler wykorzystywana jest również np. w ChatService, gdzie wstrzykiwana jest przez DI do konstruktora. I de facto, nie są to te same obiekty,