簡體   English   中英

StructureMap:在基類中注入原始屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM