Da lungo tempo il lettore prima volta scrittore qui. Attualmente sto facendo una conversione dall'uso di Ninject all'attuale versione di Castle Windsor per una semplice applicazione C# .NET.Castello di Windsor: un problema con costruttori più
Per la maggior parte, la conversione è andato bene e l'attuazione dei contenitori è eseguito perfettamente. Sto comunque avendo un piccolo problema con i miei oggetti repository.
Ho un oggetto repository utente che è codificato nel modo seguente:
public class UserRepository : IUserRepository {
public UserRepository(IObjectContext objectContext) {
// Check that the supplied arguments are valid.
Validate.Arguments.IsNotNull(objectContext, "objectContext");
// Initialize the local fields.
ObjectContext = objectContext;
}
public UserRepository(IObjectContextFactory factory)
: this(factory.CreateObjectContext()) {
}
// -----------------------------------------------
// Insert methods and properties...
// -----------------------------------------------
}
Per corrispondere a questo codice, ho impostare le seguenti voci nel file di configurazione di mia domanda:
<castle>
<components>
<component id="objectContextFactory" lifestyle="custom"
customLifestyleType="Common.Infrastructure.PerWebRequestLifestyleManager, Common.Castle"
service="Project.DAL.Context.IObjectContextFactory, Project.DAL.LINQ"
type="project.DAL.Context.ObjectContextFactory, Project.DAL.LINQ">
</component>
<component id="userRepository" lifestyle="custom"
customLifestyleType="Common.Infrastructure.PerWebRequestLifestyleManager, Common.Castle"
service="Project.BL.Repository.IUserRepository, Project.BL"
type="Project.BL.Repository.UserRepository, Project.BL.LINQ">
<parameters>
<factory>${objectContextFactory}</factory>
</parameters>
</component>
</components>
</castle>
Per me, tutto sembra come dovrebbe. Quando si tenta di risolvere un'istanza del servizio IObjectContextFactory, posso recuperare un oggetto ObjectContextFactory. Il mio problema arriva quando provo a risolvere un'istanza del servizio IUserRepository. Sono soddisfatto della seguente deliziosa eccezione:
Impossibile creare il componente 'userRepository' in quanto ha dipendenze da soddisfare. UserRepository sta aspettando le seguenti dipendenze:
Servizi:
- SandCastle.DAL.Context.IObjectContext which was not registered.
Ho provato tutto quello che posso pensare a questo. Quindi, per voi lettori di stackoverflow, dico: avete qualche idea?
Ha lavorato come gangbusters! Grazie! – highvoltage
"Windsor cerca di abbinare il costruttore più avido (uno con il maggior numero di parametri che può soddisfare)". Penso che sia più corretto dire "dalla lista dei costruttori che contengono solo parametri risolvibili, viene scelto il costruttore con il maggior numero di parametri". – Steven
@Steven che ne dici adesso? –