Mam kontrolera ASP .Net Web API, który chcę wziąć 2 parametry. Pierwszy to kontekst EF, a drugi interfejs buforujący. Jeśli mam tylko kontekst EF konstruktor jest wywoływana, ale kiedy dodać interfejs buforowania pojawia się błąd:Wstrzyknięcie do konstruktora z 2 parami nie działa
An error occurred when trying to create a controller of type 'MyV1Controller'. Make sure that the controller has a parameterless public constructor.
private MyEntities dbContext;
private IAppCache cache;
public MyV1Controller(MyEntities ctx, IAppCache _cache)
{
dbContext = ctx;
cache = _cache;
}
Moje UnityConfig.cs
public static void RegisterTypes(IUnityContainer container)
{
// TODO: Register your types here
container.RegisterType<MyEntities, MyEntities>();
container.RegisterType<IAppCache, CachingService>();
}
Spodziewam się, że podmiot teraz wie o obydwu typach, gdy zostanie wysłane żądanie dla funkcji MyV1Controller, powinno być możliwe utworzenie instancji, ponieważ konstruktor przyjmuje typy, o których wie, ale tak nie jest. Każdy pomysł, dlaczego?
[EDIT] Zauważ, że tworzę własną klasę (IConfig
) i zarejestrował go i dodać go do konstruktora i to działało, ale gdy próbuję dodać IAppCache
do mojego konstruktora i złożyć wniosek do API I dostaję błąd informujący mnie, że nie może zbudować mojej klasy kontrolera. Jedyną różnicą, którą widzę jest IAppCache
, nie jest w obszarze nazw moich projektów, ponieważ jest to klasa strony trzeciej, ale nie powinno to mieć znaczenia z tego, co rozumiem.
Oto konstruktorów dla CachingService
public CachingService() : this(MemoryCache.Default) { }
public CachingService(ObjectCache cache) {
if (cache == null) throw new ArgumentNullException(nameof(cache));
ObjectCache = cache;
DefaultCacheDuration = 60*20;
}
jest rejestracja klasa ma być pojedyncza? Sprawdź także 'Implementacja IAppCache'' CachingService', aby upewnić się, że klasa nie rzuca żadnego wyjątku po zainicjowaniu. ten wyjątek bez parametrów jest domyślnym komunikatem, gdy wystąpi błąd podczas próby utworzenia kontrolerów. – Nkosi
Jakie są zależności 'CachingService' Wspominasz, że jest to interfejs/klasa innego producenta. może wymagać zależności, o której kontener nie wie. – Nkosi
Wykorzystuje MemoryCache.Default: https://github.com/alastairtree/LazyCache/blob/master/LazyCache/CachingService.cs – user441521