public void Register(ISearchBackend backend)
 {
     if (backend is ISearchBackend <TData> typed)
     {
         typed.AddSearchFilterCallback(Token, GetSearchFilterFunc, SupportedOperatorTypes);
     }
 }
 public void Register(ISearchBackend backend)
 {
     if (backend is ISearchBackend <TData> typed)
     {
         typed.AddSearchDataCallback(GetSearchDataFunc);
     }
 }
        public void RegisterBackend <TData>(ISearchBackend <TData> backend)
        {
            if (null == backend)
            {
                throw new ArgumentNullException(nameof(backend));
            }

            // NOTE: This method can overwrite the built in backend which was registered but not another custom backend.
            if (m_SearchBackends.TryGetValue(typeof(TData), out var instance) && !(instance is SearchBackend <TData>))
            {
                throw new InvalidOperationException($"Failed to register ISearchBackend for Type=[{typeof(TData)}]. Type has already been registered.");
            }

            m_SearchBackends[typeof(TData)] = backend;

            // Register any property based search data.
            foreach (var searchData in SearchDataProperties)
            {
                backend.AddSearchDataProperty(searchData.Path);
            }

            // Register any property based filters.
            foreach (var filter in SearchFilterProperties)
            {
                backend.AddSearchFilterProperty(filter.Token, filter.Path, filter.SupportedOperatorTypes);
            }
        }
 public void Register(ISearchBackend backend)
 {
     if (backend is ISearchBackend <TData> typed)
     {
         typed.AddSearchFilterCallback(Token, GetSearchFilterFunc, Options);
     }
 }
        public void UnregisterBackend <TData>(ISearchBackend <TData> backend)
        {
            if (null == backend)
            {
                throw new ArgumentNullException(nameof(backend));
            }

            if (!m_SearchBackends.TryGetValue(typeof(TData), out var instance))
            {
                throw new InvalidOperationException($"Failed to unregister ISearchBackend for Type=[{typeof(TData)}]. Backend has not been registered.");
            }

            if (instance != backend)
            {
                throw new InvalidOperationException($"Failed to unregister ISearchBackend for Type=[{typeof(TData)}]. The specified backend does not match the registered instance.");
            }

            m_SearchBackends.Remove(typeof(TData));
        }