in edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Service/modules/MqttModule.cs [49:148]
protected override void Load(ContainerBuilder builder)
{
// IByteBufferAllocator
builder.Register(
c =>
{
var usePooledBuffers = this.mqttSettingsConfiguration.GetValue("UsePooledBuffers", false);
return usePooledBuffers ? PooledByteBufferAllocator.Default : UnpooledByteBufferAllocator.Default as IByteBufferAllocator;
})
.As<IByteBufferAllocator>()
.SingleInstance();
builder.Register(c => new ByteBufferConverter(c.Resolve<IByteBufferAllocator>()))
.As<IByteBufferConverter>()
.SingleInstance();
// MessageAddressConverter
builder.Register(c => new MessageAddressConverter(this.conversionConfiguration))
.As<MessageAddressConverter>()
.SingleInstance();
// IMessageConverter<IProtocolGatewayMessage>
builder.Register(c => new ProtocolGatewayMessageConverter(c.Resolve<MessageAddressConverter>(), c.Resolve<IByteBufferConverter>()))
.As<IMessageConverter<IProtocolGatewayMessage>>()
.SingleInstance();
// ISettingsProvider
builder.Register(c => new MqttSettingsProvider(this.mqttSettingsConfiguration))
.As<ISettingsProvider>()
.SingleInstance();
// Task<IMqttConnectionProvider>
builder.Register(
async c =>
{
var pgMessageConverter = c.Resolve<IMessageConverter<IProtocolGatewayMessage>>();
var byteBufferConverter = c.Resolve<IByteBufferConverter>();
IConnectionProvider connectionProvider = await c.Resolve<Task<IConnectionProvider>>();
ISessionStatePersistenceProvider sessionStatePersistenceProvider = await c.Resolve<Task<ISessionStatePersistenceProvider>>();
IMqttConnectionProvider mqtt = new MqttConnectionProvider(connectionProvider, pgMessageConverter, byteBufferConverter, sessionStatePersistenceProvider);
return mqtt;
})
.As<Task<IMqttConnectionProvider>>()
.SingleInstance();
// Task<ISessionStatePersistenceProvider>
builder.Register(
async c =>
{
if (this.isStoreAndForwardEnabled)
{
IDbStoreProvider dbStoreProvider = await c.Resolve<Task<IDbStoreProvider>>();
IEntityStore<string, SessionState> entityStore = new StoreProvider(dbStoreProvider).GetEntityStore<string, SessionState>(Constants.SessionStorePartitionKey);
IEdgeHub edgeHub = await c.Resolve<Task<IEdgeHub>>();
return new SessionStateStoragePersistenceProvider(edgeHub, entityStore) as ISessionStatePersistenceProvider;
}
else
{
IEdgeHub edgeHub = await c.Resolve<Task<IEdgeHub>>();
return new SessionStatePersistenceProvider(edgeHub) as ISessionStatePersistenceProvider;
}
})
.As<Task<ISessionStatePersistenceProvider>>()
.SingleInstance();
// MqttProtocolHead
builder.Register(
async c =>
{
var metadataStore = await c.Resolve<Task<IMetadataStore>>();
var settingsProvider = c.Resolve<ISettingsProvider>();
var websocketListenerRegistry = c.Resolve<IWebSocketListenerRegistry>();
var byteBufferAllocator = c.Resolve<IByteBufferAllocator>();
var mqttConnectionProviderTask = c.Resolve<Task<IMqttConnectionProvider>>();
var sessionStatePersistenceProviderTask = c.Resolve<Task<ISessionStatePersistenceProvider>>();
var authenticatorProviderTask = c.Resolve<Task<IAuthenticator>>();
var usernameParser = c.Resolve<IUsernameParser>();
IClientCredentialsFactory clientCredentialsProvider = c.Resolve<IClientCredentialsFactory>();
IMqttConnectionProvider mqttConnectionProvider = await mqttConnectionProviderTask;
ISessionStatePersistenceProvider sessionStatePersistenceProvider = await sessionStatePersistenceProviderTask;
IAuthenticator authenticator = await authenticatorProviderTask;
return new MqttProtocolHead(
settingsProvider,
this.tlsCertificate,
mqttConnectionProvider,
authenticator,
usernameParser,
clientCredentialsProvider,
sessionStatePersistenceProvider,
websocketListenerRegistry,
byteBufferAllocator,
metadataStore,
this.clientCertAuthAllowed,
this.sslProtocols);
})
.As<Task<MqttProtocolHead>>()
.SingleInstance();
base.Load(builder);
}