Wie sich zu registrieren eine Klasse, die `Func "< "> " als parameter?

Ich habe den folgenden code:

_container = new UnityContainer();
_container.RegisterType<IDownloader, Downloader>();
_container.RegisterType<INewObject, NewObject>();
_container.RegisterType<SearchViewModel>();

SearchViewModel Klasse mit Konstruktor-injection:

class SearchViewModel
{
    private readonly Func<IDownloader> _downloaderFactory;
    private readonly INewObject _newObject;
    private IDownloader _downloader;

    public SearchViewModel(Func<IDownloader> downloaderFactory, INewObject newObject)
    {
        _downloaderFactory = downloaderFactory;
        _newObject = newObject;
    }        
}

Die Frage:, Wie sich zu registrieren SearchViewModel hat Fun<> als parameter?

_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));

Der obige code funktioniert nur ohne INewObject.

Das Ziel: Beheben Fabrik mit InjectionConstructor und beheben INewObject, INewObject2, INewObject3 automatisch (ohne Parameter: RegisterType<SearchViewModel>()).

Ist es möglich? Vielleicht wechselt?

  • Warum nutzen Sie nicht die Setter-Injektion für INewObject Parameter?
  • Warum machen Sie SearchViewModel hängt Func<IDownloader>? Ist es nicht das leaky abstraction? Ich denke, Sie sollten direkt mit der Spritze IDownloader-Schnittstelle. Eine konkrete Umsetzung der IDownloader können Kapseln das Werk Verhalten. Siehe code-Beispiel hier: stackoverflow.com/questions/9757953/...
Schreibe einen Kommentar