我正在构建一个小型 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
}
}