Sto costruendo un piccolo progetto web Nancy.Ottenere TinyIoc contenitore corrente in un progetto Nancy
In un metodo di una delle mie classi (non un modulo di Nancy), vorrei fondamentalmente fare:
var myThing = TinyIoC.TinyIoCContainer.Current.Resolve<IMyThing>();
Tuttavia, v'è una sola iscrizione nel .Current
(membri non pubblici, _RegisteredTypes), che è:
TinyIoC.TinyIoCContainer.TypeRegistration
Naturalmente, nel mio codice di cui sopra, mi sto:
in grado di risolvere tipo: My.Namespace.IMyThing
Quindi, suppongo che non sto ottenendo lo stesso contenitore registrato nel mio bootstrapper?
C'è un modo per arrivarci?
EDIT
per rimpolpare un po 'più di quello che sto cercando di fare:
In sostanza, la mia struttura url sembra qualcosa di simile:
/{} myType/{myMethod}
Quindi, l'idea è, andando a:/customer/ShowAllWithTheNameAlex caricare il Customer
servizio, ed eseguire il metodo di showAllWithTheNameAlex
Come faccio questo è:
public interface IService
{
void DoSomething();
IEnumerable<string> GetSomeThings();
}
Ho poi hanno una classe astratta di base, con un metodo GetService che restituisce il servizio.
È qui che sto cercando di utilizzare TinyIoC.TinyIoCContainer.Current.Resolve();
In questo caso, sarebbe TinyIoC.TinyIoCContainer.Current.Resolve ("typeName");
public abstract class Service : IService
{
abstract void DoSomething();
abstract IEnumerable<string> GetSomeThings();
public static IService GetService(string type)
{
//currently, i'm doing this with reflection....
}
}
Ecco la mia implementazione del servizio.
public class CustomerService : Service
{
public void DoSomething()
{
//do stuff
}
public IEnumerable<string> GetSomeThings()
{
//return stuff
}
public IEnumerable<Customer> ShowAllWithTheNameAlex()
{
//return
}
}
Infine, ho il mio modulo di Nancy, che assomiglia a:
public class MyModule : NancyModule
{
public MyModule()
{
Get["/{typeName}/{methodName}"] = p => ExecuteMethod(p.typeName, p.methodName);
}
private dynamic ExecuteMethod(string typeName, string methodName)
{
var service = Service.GetService(typeName);
var result = service.GetType().GetMethod(methodName).Invoke(service, null);
//do stuff
return result; //or whatever
}
}
Grazie per la risposta .... Pensa che ci stiamo arrivando Ho approfondito la mia domanda per illustrare esattamente cosa sto cercando di fare ... speriamo che abbia un po 'più senso! – Alex
Dato che hai effettuato il cross-post al nostro gruppo di utenti, ho fornito una spiegazione più dettagliata in https://groups.google.com/d/topic/nancy-web-framework/FVuM9kIiI7Q/discussion – TheCodeJunkie