我正在构建一个小的Nancy Web项目。
在我的一个类的方法(不是nancy模块)中,我想要实现以下功能:
var myThing = TinyIoC.TinyIoCContainer.Current.Resolve<IMyThing>();
然而,在 .Current
(非公共成员,_RegisteredTypes) 中只有一个注册类型:
TinyIoC.TinyIoCContainer.TypeRegistration
自然地,在我的上面的代码中,我得到了以下结果:
无法解析类型: My.Namespace.IMyThing
所以,我猜我的引导程序没有注册相同的容器?
有没有办法获取它?
编辑
为了更好地阐述我的尝试:
基本上,我的 URL 结构类似于:
/{myType}/{myMethod}
所以,想要加载 Customer
服务并执行 showAllWithTheNameAlex
方法的想法是:
前往: /customer/ShowAllWithTheNameAlex
public interface IService
{
void DoSomething();
IEnumerable<string> GetSomeThings();
}
我接着创建了一个抽象基类,其中包含一个返回服务的方法 GetService。
在这里,我尝试使用 TinyIoC.TinyIoCContainer.Current.Resolve();
在这种情况下,应该使用 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....
}
}
这是我的服务实现。
public class CustomerService : Service
{
public void DoSomething()
{
//do stuff
}
public IEnumerable<string> GetSomeThings()
{
//return stuff
}
public IEnumerable<Customer> ShowAllWithTheNameAlex()
{
//return
}
}
最后,我有了我的Nancy模块,看起来像这样:
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
}
}