私はハンドラメソッドを持つアプリケーションを持っています。ハンドラメソッドは、要求を処理する必要があるオブジェクトの名前と要求のパラメータを含むjson文字列を取得します。基本的には、このような何か(私はそれをシンプルにしておこう):Unityを使用して名前だけに基づいてオブジェクトを取得する
public interface IJob
{
bool Execute();
bool Hydrate(string source);
}
public class JobBase
{
public int Id { get; set; }
public JobType JobType { get; set; }
public CronExpression CronExpression { get; set; }
}
public class JobSubmitClone : JobBase, IJob
{
public string[] Tokens { get; set; }
public bool Hydrate(string source)
{
// code omitted...
return true;
}
public bool Execute()
{
// code omitted...
return true;
}
}
IJobとJobBaseは両方の共通クラスのプロジェクトに保管されています。すべてのアプリケーションがこのDLLを参照しています。
私はUnityをインストールし、コンテナをロード中のいずれかの手順を同様に達成されてい私のメインアプリで:各「ジョブ」
// Scan assemblies for Job definitions...
_container.RegisterTypes(AllClasses.FromAssembliesInBasePath().
Where(type => typeof(IJob).IsAssignableFrom(type)),
WithMappings.FromAllInterfaces,
WithName.TypeName,
WithLifetime.Transient);
独自のクラスのプロジェクトで定義され、がによって参照されていませんメインアプリ。各「仕事」はとIJob
から継承する必要があります。
メインアプリケーションには、単純なRESTサービスが公開されています。私はJobName
に基づいて、コンテナからオブジェクトを引くしようとしていますメインアプリで
{ jobName : JobSubmitClone, Id : 1, JobType : 2, CronExpression : '' }
:あなたのような何かを投稿することができます。私は(はい、私はそれがIoCのパターンに違反知っている)、これを試してみた:
var container = UnityHelpers.GetConfiguredContainer();
var job = container.Resolve<IJob>(myParams.jobName); // "JobSubmitClone" //
var hydrated = job.Hydrate(myParams);
if(hydrated)
var result = job.Execute();
私は、次のエラーを取得しています:私は
Exception is: InvalidOperationException - The current type, IJob, is an interface and cannot be constructed. Are you missing a type mapping?
何をしないのですか?