public static Uri GetResourceUri(this IOicResourceRepository resource) { throw new NotImplementedException(); //return new UriBuilder($"oic://{resource.Device.Endpoint.Authority}") //{ // Path = resource.RelativeUri //}.Uri; }
public ResourceRepositoryMiddleware(RequestDelegate next, IServiceProvider services, IOptions <ResourceRepositoryOptions> options) { _next = next; _options = options.Value; _oicConfiguration = services.GetRequiredService <OicConfiguration>(); _resourceRepository = _options.ResourceRepository ?? (_options.ResourceRepositoryType != null ? (IOicResourceRepository)ActivatorUtilities.CreateInstance(services, _options.ResourceRepositoryType, _options.ResourceRepositoryArgs) : ActivatorUtilities.CreateInstance <DefaultResourceRepository>(services)); }
public ResourceRepositoryContext(OicContext context, ResourceRepositoryOptions options, IOicResourceRepository resourceProvider) { _context = context ?? throw new ArgumentNullException(nameof(context)); _options = options ?? throw new ArgumentNullException(nameof(options)); _resourceProvider = resourceProvider ?? throw new ArgumentNullException(nameof(resourceProvider)); // Since request path is a segment, ensure it is surrounded with slashes. _requestPath = _options.RequestPath ?? "/"; if (!_requestPath.EndsWith("/")) { _requestPath += "/"; } if (!_requestPath.StartsWith("/")) { _requestPath = "/" + _requestPath; } }
public DefaultResourceRepository(IHostingEnvironment hostingEnvironment, ILogger <DefaultResourceRepository> logger, IServiceProvider service) { _logger = logger; _hostingEnvironment = hostingEnvironment; // First, check IServiceProvider for any IOicResourceRepository instances var repositoryServices = service.GetServices <IOicResourceRepository>(); var defaultService = repositoryServices.FirstOrDefault(r => r.GetType().GetCustomAttribute <DefaultResourceRepositoryAttribute>() != null); if (defaultService != null) { _resourceRepository = defaultService; } else if (repositoryServices.Count() == 1) { _resourceRepository = repositoryServices.First(); } else if (repositoryServices.Count() > 1) { throw new NotSupportedException($"Multiple {nameof(IOicResourceRepository)} instances were provided in {nameof(IServiceProvider)}. Please add {nameof(DefaultResourceRepositoryAttribute)} to one, or remove multiple instances"); } else { // TODO: IOicRepositoryContext to return a repository? var repositories = Assembly.Load(new AssemblyName(hostingEnvironment.ApplicationName)) .ExportedTypes .Where(t => typeof(IOicResourceRepository).IsAssignableFrom(t)); var repository = GetRepository(repositories); if (repository != null) { _resourceRepository = (IOicResourceRepository)ActivatorUtilities.CreateInstance(service, repository); } } }