[英]StructureMap: Injecting a primitive property in a base class
與此問題相關,但這個問題與StructureMap有關。
我有以下接口定義:
public interface ICommandHandler
{
ILogger Logger { get; set; }
bool SendAsync { get; set; }
}
我有多個實現ICommandHandler
實現,需要解決。 我想在實現ICommandHandler
實例中自動注入這兩個屬性。
我找到了一種方法來通過讓所有實現繼[SetterProperty]
類型和[SetterProperty]
屬性來注入ILogger
:
public abstract class BaseCommandHandler : ICommandHandler
{
[SetterProperty]
public ILogger Logger { get; set; }
public bool SendAsync { get; set; }
}
然而,這並沒有幫助我在所有實現中注入原始bool
類型。
命令處理程序實現從基接口繼承的通用接口:
public interface ICommandHandler<TCommand> : ICommandHandler
where TCommand : Command
{
void Handle(TCommand command);
}
這是我目前的配置:
var container = new Container();
container.Configure(r => r
.For<ICommandHandler<CustomerMovedCommand>>()
.Use<CustomerMovedHandler>()
.SetProperty(handler =>
{
handler.SendAsync = true;
}));
container.Configure(r => r
.For<ICommandHandler<ProcessOrderCommand>>()
.Use<ProcessOrderHandler>()
.SetProperty(handler =>
{
handler.SendAsync = true;
}));
container.Configure(r => r
.For<ICommandHandler<CustomerLeftCommand>>()
.Use<CustomerLeftHandler>()
.SetProperty(handler =>
{
handler.SendAsync = true;
}));
// etc. etc. etc.
正如您所看到的,我為每個配置設置了屬性,這非常麻煩(但是, SetProperty
接受Action<T>
委托非常好)。
有哪些方法可以更有效地使用StructureMap?
也許你可以用這個?
container.Configure(r => r.For<ICommandHandler>()
.OnCreationForAll(handler =>
{
handler.Logger = container.Resolve<ILogger>();
handler.SendAsync = true;
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.