我正在尝试在插件样式系统中使用 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();
我得到一个空引用异常,因为没有IBarService
设置实例。
创建插件后,如果我这样做:
ObjectFactory.BuildUp(pluginObject)
.
一切都很好,并且FooPlugin
正确实施了IBarService
.
有什么方法可以简单地让我装饰我的插件属性[SetterProperty]
并让 StructureMap 在创建插件时自动注入这些属性而无需调用ObjectFactory.BuildUp(pluginObject)
?