C# 将类型绑定到Webjob SDK触发器

C# 将类型绑定到Webjob SDK触发器,c#,azure,azureservicebus,azure-webjobssdk,azure-servicebus-topics,C#,Azure,Azureservicebus,Azure Webjobssdk,Azure Servicebus Topics,我正在使用Webjob SDK为azure服务总线提供服务 它工作得很好,现在我想开始参数化它的输入 我一直在做: public static void ProcessTopicStatusMessage([ServiceBusTrigger("%topic%", "%subname%")] BrokeredMessage message, TextWriter logger) 现在我还想添加一个附加参数:endpoint。大概是这样的: public static void Proc

我正在使用Webjob SDK为azure服务总线提供服务

它工作得很好,现在我想开始参数化它的输入

我一直在做:

public static void ProcessTopicStatusMessage([ServiceBusTrigger("%topic%", "%subname%")] BrokeredMessage message,
    TextWriter logger)
现在我还想添加一个附加参数:endpoint。大概是这样的:

public static void ProcessTopicStatusMessage([ServiceBusTrigger("%topic%", "%sub%")] BrokeredMessage message, Uri endPoint,
    TextWriter logger)
config.BindingFactory.BindToInput<ServiceBusAttribute,Uri>(typeof(Uri), new Uri(myURI));
我认为可以通过如下方式将URI类型绑定到配置:

public static void ProcessTopicStatusMessage([ServiceBusTrigger("%topic%", "%sub%")] BrokeredMessage message, Uri endPoint,
    TextWriter logger)
config.BindingFactory.BindToInput<ServiceBusAttribute,Uri>(typeof(Uri), new Uri(myURI));
config.BindingFactory.BindToInput(typeof(Uri),newuri(myURI));
但它似乎不起作用。
这是可能的还是我必须自己定制触发器?

正如您所提到的,您可以声明一个静态字段来存储uri,或者使用DI容器注入它。
JobHostConfiguration
有一个允许您使用DI的
JobActivator

这里我使用()创建一个自定义作业激活器

public class SimpleInjectorJobActivator : IJobActivator
{
    private readonly Container _container;

    public SimpleInjectorJobActivator(Container container)
    {
        _container = container;
    }

    public T CreateInstance<T>()
    {
        return (T)_container.GetInstance(typeof(T));
    }
}
main
函数中,需要配置DI容器:

static void Main()
{
    ...
    // get the uri from the config database
    Uri myUry = ...
    var container = new Container();
    container.Register(() => new TopicMessageProcessor(myUry));
    container.Verify();

    var config = new JobHostConfiguration
    {
        JobActivator = new SimpleInjectorJobActivator(container)
    };

    ...    
}

请注意,这是一个非常简单的示例。如果有帮助,请告诉我。

如果这个字符串不变,您需要绑定它吗?@Thomas it-can-change。我希望从配置数据库中得到这个是的,但它是配置,你可以在作业开始时得到它???为此编写绑定触发器可能很痛苦;-)@Thomas我能看到的唯一合理的方法是将其作为静态字段存储在“Program”类中并从中获取,但这感觉有点难看