czytałem tutaj różne inne pytanie na argumencie, przedeznaleźć właściwy korzeń kompozycji do biblioteki .NET
Dependency Inject (DI) “friendly” library
Ioc/DI - Why do I have to reference all layers/assemblies in entry application?
article i ten (i inne różne materiały) .
Jednak nie jest dla mnie jasne, gdzie umieścić kompozycję root w projekcie biblioteki .NET. Projekt nie należy do żadnego konkretnego typu wymienionego w tym artykule. W przypadku komputerów stacjonarnych, konsoli, a nawet aplikacji internetowych ten punkt jest wyraźnie zdefiniowany.
Moje obecne podejście do zawijania pojemnika, zarejestruj rodzajów i ponownie wystawiać metodę Resolve:
class DefaultBootstrapper : IBootstrapper {
public Bootstrapper() {
_container = new XXXContainer();
RegisterTypes(_container);
}
public T Resolve<T>() where T : class {
return _container.Resolve<T>();
}
// + other _container.Resolve() overloads
private readonly XXXContainer _container;
}
Potem zapobiec konsumentów biblioteki do tworzenia instancji administratora biblioteki (np określającą konstruktorów wewnętrznych) a tym samym wymuszając stosowanie fabryce jednoelementowy:
class XYZFactory {
static XYZFactory() {}
private XYZFactory(IBootstrapper bootstrapper) {
_bootstrapper = bootstrapper;
}
public static XYZFactory Instance {
get { return Singleton; }
}
public ABCType CreateABCType(string param1) {
return _bootstrapper.Resolve<ABCType>(param1, _bootstrapper.Resolve<Dependency1>);
}
private static readonly XYZFactory Singleton = XYZFactory(new DefaultBootstrapper);
private readonly IBootstrapper _bootstrapper;
}
pytanie brzmi, jest to lepsze podejście lub lepszy wzór do zatrudniania dla zlokalizowania compositi na root w projekcie bibliotecznym?
Przykro mi, nie mogę jeszcze głosować (ale będę na 15+). Kiedy interesowałem się właśnie ** scenariuszem ramowym **, kiedy kontener (jeśli jest obecny) ukryłby się przed _public interface_, przedstawiłeś mi wiele różnych. Czy mogę prosić o odniesienie do pogłębienia argumentu (artykuł lub książka na blogu) o iniekcji __poor-man__, które w przypadku bibliotek wielokrotnego użytku stały się przydatne? Jeszcze raz dziękuję – jay
Nie mogę odwołać się do żadnej konkretnej pracy, aby utworzyć kopię moich argumentów, ale ogólnie książka Marka Seemanna "Dependency Injection w .NET" jest najlepszym odniesieniem dla DI, chociaż głównie mówi o scenariuszu LOB. Możesz spojrzeć na kod źródłowy Microsoft Enterprise Library. Zwróć uwagę na E.L. bierze ciężką zależność od Unity i jest czymś, o czym myślę, że powinieneś próbować zapobiec, pisząc bibliotekę wielokrotnego użytku. – Steven
To brzmi jak potwierdzenie, że _Dep. Wstrzykiwanie .NET_ jest dla mnie wymaganą lekturą. Pogłębię się dalej w tym sporze, ale, powracając do wielokrotnego użytku, pytanie o bibliotekę, myślę, że ** wtórny "zastrzyk złego człowieka" w tym przypadku (który, jak pan twierdzi, jest wyjątkowy), jest właściwym wyborem. Umożliwia testowanie jednostkowe (poprzez atrybut ** InternalsVisibleTo **) i jest to dla mnie centralne wymaganie. – jay