私は小さなナンシーのウェブプロジェクトを構築しています。
私のクラスの1つ(ナンシーモジュールではない)のメソッドで、基本的に次のことを行います。
var myThing = TinyIoC.TinyIoCContainer.Current.Resolve<IMyThing>();
.Current
ただし、 (非公開メンバー、_RegisteredTypes)には、TinyIoC.TinyIoCContainer.TypeRegistrationの
1つの登録しかありませ ん。
当然、上記のコードでは、次のようになります。
タイプを解決できません: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
}
}
最後に、次のようなナンシーモジュールがあります。
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
}
}