in edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Service/modules/FileConfigSourceModule.cs [41:134]
protected override void Load(ContainerBuilder builder)
{
// Task<IConfigSource>
builder.Register(
async c =>
{
var serde = c.Resolve<ISerde<DeploymentConfigInfo>>();
IConfigSource config = await FileConfigSource.Create(
this.configFilename,
this.configuration,
serde);
return config;
})
.As<Task<IConfigSource>>()
.SingleInstance();
// ISdkModuleClientProvider
builder.Register(c => new SdkModuleClientProvider())
.As<ISdkModuleClientProvider>()
.SingleInstance();
// IEdgeAgentConnection
builder.Register(
c =>
{
var serde = c.Resolve<ISerde<DeploymentConfig>>();
var deviceClientprovider = c.Resolve<IModuleClientProvider>();
var requestManager = c.Resolve<IRequestManager>();
var deviceManager = c.Resolve<IDeviceManager>();
var deploymentMetrics = c.Resolve<IDeploymentMetrics>();
Option<X509Certificate2> manifestTrustBundle = Option.None<X509Certificate2>();
IEdgeAgentConnection edgeAgentConnection = new EdgeAgentConnection(deviceClientprovider, serde, requestManager, deviceManager, deploymentMetrics, manifestTrustBundle);
return edgeAgentConnection;
})
.As<IEdgeAgentConnection>()
.SingleInstance();
// IReporter
builder.Register(
c =>
{
var runtimeInfoDeserializerTypes = new Dictionary<string, Type>
{
[DockerType] = typeof(DockerReportedRuntimeInfo),
[Constants.Unknown] = typeof(UnknownRuntimeInfo)
};
var edgeAgentDeserializerTypes = new Dictionary<string, Type>
{
[DockerType] = typeof(EdgeAgentDockerRuntimeModule),
[Constants.Unknown] = typeof(UnknownEdgeAgentModule)
};
var edgeHubDeserializerTypes = new Dictionary<string, Type>
{
[DockerType] = typeof(EdgeHubDockerRuntimeModule),
[Constants.Unknown] = typeof(UnknownEdgeHubModule)
};
var moduleDeserializerTypes = new Dictionary<string, Type>
{
[DockerType] = typeof(DockerRuntimeModule)
};
var deserializerTypesMap = new Dictionary<Type, IDictionary<string, Type>>
{
{ typeof(IRuntimeInfo), runtimeInfoDeserializerTypes },
{ typeof(IEdgeAgentModule), edgeAgentDeserializerTypes },
{ typeof(IEdgeHubModule), edgeHubDeserializerTypes },
{ typeof(IModule), moduleDeserializerTypes }
};
var edgeAgentConnection = c.Resolve<IEdgeAgentConnection>();
return new IoTHubReporter(
edgeAgentConnection,
new TypeSpecificSerDe<AgentState>(deserializerTypesMap),
this.versionInfo) as IReporter;
})
.As<IReporter>()
.SingleInstance();
// IRequestManager
builder.Register(
c => new RequestManager(Enumerable.Empty<IRequestHandler>(), TimeSpan.Zero) as IRequestManager)
.As<IRequestManager>()
.SingleInstance();
// Task<IStreamRequestListener>
builder.Register(c => Task.FromResult(new NullStreamRequestListener() as IStreamRequestListener))
.As<Task<IStreamRequestListener>>()
.SingleInstance();
base.Load(builder);
}