プラグインスタイルのシステムでStructureMapのプロパティインジェクションを使用しようとしています。
ObjectFactory.Initialize(o => o.Scan(s =>
{
s.AssembliesFromPath("path_to_assemblies");
s.WithDefaultConventions();
});
これがサンプル実装です(TとTUは単なる単純なクラスであるため、意図的に定義することはしませんでした)
public interface IBarService
{
void Baz();
}
public class BarService : IBarService
{
public void Baz() { /* implementation */ }
}
public abstract class PluginBase<T, TU> : IPlugin
where T : AClass, new()
where TU : BClass
{
protected PluginBase()
{
//some init code in the constructor
}
}
//Foo is created at run-time via Activator.CreateInstance()
public class FooPlugin : PluginBase<AClass, BClass>
{
[SetterProperty]
public IBarService BarService { get; set; }
public void Fooey()
{
BarService.Baz();
}
}
実行時に作成されるこれらすべてのプラグインのプロパティの依存関係を自動配線したいと思います。プロパティインジェクションから始めて、必要に応じてコンストラクターに移動すると思いました。
私が行った場合:
var obj = ObjectFactory.GetInstance<IBarService>();
のインスタンスのどこでもFooPlugin
、正しい実装が得られ、すべてが順調です。
私が行った場合:
this.BarService.Baz();
のインスタンスが設定されていないため、null参照例外が発生しますIBarService
。
プラグインを作成した後、これを行うと:
ObjectFactory.BuildUp(pluginObject)
。
すべてが順調でFooPlugin
、の正しい実装がありIBarService
ます。
プラグインのプロパティを簡単に装飾して、プラグ[SetterProperty]
インの作成時にStructureMapに自動的に挿入させる方法はありますObjectFactory.BuildUp(pluginObject)
か?