C# 将类型绑定到Webjob SDK触发器
我正在使用Webjob SDK为azure服务总线提供服务 它工作得很好,现在我想开始参数化它的输入 我一直在做: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
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”类中并从中获取,但这感觉有点难看