クラス名を受け取り、その関数を呼び出すコンソールアプリケーションがあります。
Assembly asm = Assembly.GetEntryAssembly();
ObjectHandle oh = Activator.CreateInstance(asm.FullName, typeName);
IScheduledTask task = (IScheduledTask)oh.Unwrap();
task.Execute();
これまでは、それ以外に初期化を行う必要はありませんでしたが、コンストラクターの注入によってIScheduledTaskが依存するコンポーネントがいくつかあります。
クラスの同じ名前で名前付きインスタンスを定義する方法はありますか?後でresolveを使用してすべての依存関係を解決しますか?
つまり、パラメータとして「SomeScheduledTask」を取得した場合、次のことができます。
IScheduledTask task = (IScheduledTask)container.Resolve(typeName); // I know this is possible. The problem is the registration.
私の問題を解決するためにこのようなことをすることはできますか?
container.Register(Component.For<IScheduledTask>().Named(t => t.Name).Activator<MyActivator>())
そして私のアクティベーターでこのようなことをします:
public class MyActivator : IComponentActivator
{
public object Create(CreationContext context)
{
string typeName = context.???; // How do I get the named instance name from here?
Assembly asm = Assembly.GetEntryAssembly();
ObjectHandle oh = Activator.CreateInstance(asm.FullName, typeName);
IScheduledTask task = (IScheduledTask)oh.Unwrap();
task.Execute();
}
public void Destroy(object instance)
{
}
}