Estoy construyendo un pequeño proyecto web de Nancy.Obtención del contenedor actual TinyIoc en un proyecto de Nancy
En un procedimiento de una de mis clases (no es un módulo de Nancy), me gustaría básicamente hacer:
var myThing = TinyIoC.TinyIoCContainer.Current.Resolve<IMyThing>();
Sin embargo, sólo hay una inscripción en .Current
(miembros no públicos, _RegisteredTypes), que es:
TinyIoC.TinyIoCContainer.TypeRegistration
Naturalmente, en mi código anterior, que estoy recibiendo:
No se puede resolver tipo: My.Namespace.IMyThing
Entonces, supongo que no estoy obteniendo el mismo contenedor registrado en mi bootstrapper?
¿Hay alguna manera de conseguirlo?
EDITAR
para dar cuerpo a un poco más de lo que yo estoy tratando de hacer:
Básicamente, mi estructura de la URL tiene la siguiente apariencia:
/{} myType/{myMethod}
Entonces, la idea es, yendo a:/customer/ShowAllWithTheNameAlex cargar el Customer
servicio, y ejecutar el método showAllWithTheNameAlex
¿Cómo hago esto es:
public interface IService
{
void DoSomething();
IEnumerable<string> GetSomeThings();
}
entonces tienen una clase base abstracta, con un GetService método que devuelve el servicio.
Aquí estoy tratando de usar el TinyIoC.TinyIoCContainer.Current.Resolve();
En este caso, sería 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....
}
}
Aquí está mi implementación del servicio.
public class CustomerService : Service
{
public void DoSomething()
{
//do stuff
}
public IEnumerable<string> GetSomeThings()
{
//return stuff
}
public IEnumerable<Customer> ShowAllWithTheNameAlex()
{
//return
}
}
Por último, tengo mi Módulo Nancy, que se parece 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
}
}
Gracias por su respuesta .... Creo que estamos llegando He desarrollado mi pregunta para ilustrar exactamente lo que estoy tratando de hacer ... ¡ojalá tenga más sentido! – Alex
Como realizó una publicación cruzada en nuestro grupo de usuarios, proporcioné una explicación más detallada allí https://groups.google.com/d/topic/nancy-web-framework/FVuM9kIiI7Q/discussion – TheCodeJunkie